将char添加到字符串中并删除char数组
Add char to a String and delete the char array
是将char
从char*
添加到std::string
,然后delete[]
CHAR数组可能导致UB?
或在delete[]
之后处理字符串是安全的吗?
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?
push_back函数的定义是
void push_back( CharT ch );
由于参数CH是按值而不是参考传递的,因此将其复制到字符串中,因此删除您附加到字符串的字符的来源不会引起任何问题。
创建字符串后的删除很好,因为push_back
复制了数据。但是,更好的方法是简单使用:
std::string data(buffer, buffer_size);
在循环中调用push_back
可能会多次触发内存分配。但是,使用构造函数,整个buffer_size
内存都会一次分配。
它是安全的。但是您也可以使用std :: string :: append(const char*s,size_t n);
您可以从std :: string :: push_back
的签名中看到void push_back( CharT ch );
复制函数参数。因此,将其复制到某个字符串后删除char
拥有的任何资源是可以的。
请注意,您还可以避免通过
进行手动循环data.insert(data.end(), buffer, buffer + buffer_size);
是的,因为您将字符从缓冲区复制到数据,因此在复制完成后两个变量之间没有链接。另外,您应该考虑将Char*复制到字符串的更有效的选项,例如此http://www.cplusplus.com/reference/string/string/string/poerator =/
相关文章:
- 删除C++中带有 vector<const char *> 的类
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 将char添加到字符串中并删除char数组
- 为什么删除字符串迭代器会产生const char参考
- 如何从const char *类型字符串中删除新线字符
- 在C++中,是否定义了删除基元类型(如通过 char* uint32_t)的行为
- 计数最低号码.char.从两个字符串中删除以使它们成为字眼
- 删除字节转换的char*
- 崩溃,如果使用向量删除了一个嵌入式容器的destructor中删除char*成员
- 如何从 char 数组中删除前 4 个字符
- 如何从'char const*'中删除常量
- C 新/删除和char *
- 删除Char指针在destructor中不起作用
- 删除char阵列指针触发了一个神秘的断点
- 我使用构造函数(使用内存 Dinamic char *t = 新字符 [10] t = "test123456" ;))时遇到错误堆错误并在析构函数中删除 [] t;错误
- 分配字符串时出现 char* 新建和删除 [] 错误
- 删除从C++中的堆之一的Char[]创建的堆上的字符串
- 如何在char*func()中正确删除用new[]分配的char数组
- 为什么我在删除char*时得到内存异常
- 删除char**数组的正确方法