C++新的 * 字符不为空
C++ new * char aren't empty
我有一个问题。
我在ASIO中开发服务器,数据包是指向char。
当我创建新字符(例如char * buffer = new char[128];
)时,我必须手动将其清除为空。
for(int i =0;i<128;i++)
{
buffer[i] = 0x00;
}
我做错了什么,那个字符不清楚吗?
不必遍历未初始化值的数组。你可以像这样动态实例化一个零数组:
char * buffer = new char[128](); // all elements set to 0
^^
在c++中调用new操作符有两种方式——默认初始化和零初始化。
要默认初始化(这将使值未定义),调用:
int * i = new int;
在该值被设置之前,读取或使用该值是未定义的行为。
要将初始化为零(将设置为0),使用:
int * i = new int();
也适用于数组:
int * i = new int[4]; // ints are not initialised, you must write to them before reading them
int * i = new int[4](); // ints all zero initialised
这里有更多的信息
分配的内存将不清楚,它将包含随机的东西。这就是内存分配的工作原理。您必须运行for
-循环或使用memset
手动清除它。
您也可以使用calloc。它自动将每个元素初始化为0。例句:
char* buffer = (char *) calloc (128, sizeof (char))
第一个参数是要分配的块的数量。其次是块的大小。这个函数返回void*,所以你必须将它的值转换为(char *)如果您使用calloc(或malloc或任何"纯c"分配函数),您最好使用free函数来释放内存,而不是delete。
相关文章:
- C++字符*缓冲区的大小
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 模板元编程:如何将参数包组合成新的参数包
- 从文件C 读取并在需要时编写新的行字符
- 为什么在编辑 fastq 文件并将输出写入新的 fastq 文件时引入不可打印字符?
- 常量字符* 向量的新值没有得到 push_back()
- C++ strcpy_s复制到新的字符数组时引发错误
- 从 1 中创建新的字符 * 作为参数,元素位于 2 个索引之间
- 如何将字符**中的数据值复制到新字符**中
- 创建一个从前缀到C 中字符位置的新字符串
- 在字符数组中插入新的换行符
- C++新的 * 字符不为空
- 按值传递字符数组,并从函数返回一个新的字符数组
- 在文件中写入新的行字符
- 将static_cast<字符 *>malloc/free/free转换为新的/删除
- 在每个文件的末尾是否总是有一个新的行字符( ) ?
- 新的[]*字符是否可以被删除[](ed)
- 字符数组不符合新的大小