调整大小后将 unique_ptr 字符数组复制到另一个 unique_ptr 字符数组,字符末尾缺少字母
Copying a unique_ptr char array to another unique_ptr char array after resizing is missing letter by the end of char
问题描述
在下面的源代码中,我做了以下事情:
用“Hello”创建一个字符串名称
创建一个大小为 name.size() + 1 size
的 unique_ptr ptr 字符数组
memcpy 字符串到ptr数组
添加空终止字符
创建一个大小为 strlen(ptr.get()) +2
的 unique_ptr newptr 字符数组
memcpy ptr 到 newptr
释放指针
给你好加上 X
添加空终止字符
源代码
#include <iostream>
#include <string>
#include <memory>
#include <string.h>
int main()
{
std::string name = "hello";
std::unique_ptr<char[]> ptr(new char[name.size()+1]);
memcpy(ptr.get(),name.c_str(),name.size());
ptr[name.size()] ='[=12=]';
std::unique_ptr<char[]> newptr(new char[strlen(ptr.get())+2]);
memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
newptr[strlen(newptr.get())-1]= 'X';
newptr[strlen(newptr.get())]= '[=12=]';
ptr.release(); //RELEASE POINTER
char* c = newptr.get();
std::cout<< c << std::endl;
return 0;
}
输出
预期的输出应该是:helloX
但我只收到 Hellx
我不知道为什么它不起作用。我不明白为什么没有将字符 X 添加到 newPtr 字符数组的末尾。
抱歉,如果我破坏了唯一指针。这是我的第一次尝试
memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
这会复制所有内容,但不包括空终止符。
newptr[strlen(newptr.get())-1]= 'X';
这会调用 strlen
使用非 null 终止(且部分未初始化)的字符串。程序的行为未定义。
ptr.release(); //RELEASE POINTER
这会导致内存泄漏!
问题描述
在下面的源代码中,我做了以下事情:
用“Hello”创建一个字符串名称
创建一个大小为 name.size() + 1 size
的 unique_ptr ptr 字符数组memcpy 字符串到ptr数组
添加空终止字符
创建一个大小为 strlen(ptr.get()) +2
的 unique_ptr newptr 字符数组memcpy ptr 到 newptr
释放指针
给你好加上 X
添加空终止字符
源代码
#include <iostream>
#include <string>
#include <memory>
#include <string.h>
int main()
{
std::string name = "hello";
std::unique_ptr<char[]> ptr(new char[name.size()+1]);
memcpy(ptr.get(),name.c_str(),name.size());
ptr[name.size()] ='[=12=]';
std::unique_ptr<char[]> newptr(new char[strlen(ptr.get())+2]);
memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
newptr[strlen(newptr.get())-1]= 'X';
newptr[strlen(newptr.get())]= '[=12=]';
ptr.release(); //RELEASE POINTER
char* c = newptr.get();
std::cout<< c << std::endl;
return 0;
}
输出
预期的输出应该是:helloX
但我只收到 Hellx
我不知道为什么它不起作用。我不明白为什么没有将字符 X 添加到 newPtr 字符数组的末尾。
抱歉,如果我破坏了唯一指针。这是我的第一次尝试
memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
这会复制所有内容,但不包括空终止符。
newptr[strlen(newptr.get())-1]= 'X';
这会调用 strlen
使用非 null 终止(且部分未初始化)的字符串。程序的行为未定义。
ptr.release(); //RELEASE POINTER
这会导致内存泄漏!