C++ 向字符串添加字符并删除字符数组
是否将C++ 向字符串添加字符并删除字符数组,c++,C++,是否将char从char*添加到std::string然后delete[]字符数组会导致UB 或者在删除[]之后处理字符串是否安全 int buffer_size = 4096; char* buffer = new char[buffer_size]; //here there was removed code that assign values to the buffer[i] std::string data; for (int i = 0; i < buffer_s
char
从char*
添加到std::string
然后delete[]
字符数组会导致UB
或者在删除[]
之后处理字符串是否安全
int buffer_size = 4096;
char* buffer = new char[buffer_size];
//here there was removed code that assign values to the buffer[i]
std::string data;
for (int i = 0; i < buffer_size ; i++)
{
data.push_back(buffer[i]);
}
delete[] buffer;
//is the data string content secured at this point?
int buffer_size=4096;
char*buffer=新字符[buffer_size];
//这里删除了为缓冲区[i]赋值的代码
std::字符串数据;
对于(int i=0;i
它很安全。但是您也可以使用std::string::append(const char*s,size\u t n) 您可以从
复制函数参数。因此,在将char
复制到某个字符串中之后,删除拥有该字符的任何资源都可以
注意,您还可以通过以下方式避免手动循环
data.insert(data.end(), buffer, buffer + buffer_size);
是的,这很好,因为您将字符从缓冲区复制到数据,所以在复制完成后,两个变量之间没有链接。此外,您应该考虑将char *复制到字符串中的更有效的选择,例如这一个< p> PosichBuffing函数的定义是
void push_back( CharT ch );
由于参数ch是通过值传递的,而不是通过引用传递的,因此它会被复制到字符串中,因此删除附加到字符串中的字符源不会导致任何问题。创建字符串后删除是可以的,因为
push\u
会复制数据。但是,更好的方法是简单地使用:
std::string data(buffer, buffer_size);
在循环中调用
push_back
,可能会多次触发内存分配。但是对于构造函数,整个缓冲区大小内存一次分配。不,这很好。
std::string data(buffer, buffer_size);