我想要一个长度等于循环迭代的动态字符数组。
char* output;
for (short i=0; i<2; i++){
output = new char[i+1];
printf("string length: %d\n",strlen(output));
delete[] output;
}
但是strlen
返回 16,我希望它是 1 和 2。
我想要一个长度等于循环迭代的动态字符数组。
char* output;
for (short i=0; i<2; i++){
output = new char[i+1];
printf("string length: %d\n",strlen(output));
delete[] output;
}
但是strlen
返回 16,我希望它是 1 和 2。
指向的新分配的内存output
没有初始化:它可能有任何内容。
strlen
要求它的参数是一个指向以 null 结尾的字符串的指针,这output
不是,因为它还没有被初始化。该调用strlen(output)
会导致您的程序表现出未定义的行为,因为它读取了这个未初始化的内存。任何结果都是可能的。
strlen 期望在字符串的末尾找到 NULL,它会计算所有字符,直到找到 0
您应该更改行以output = new char[i+1]();
将字符初始化为 0
在 C 中,字符串以空值结尾。strlen()
返回计数的字节,直到找到该空终止。
new
运算符不保证内存块的字节将被 _zero_ed。
您可以使用calloc()
,它将它分配的块的所有字节归零,或者您需要memset(output, 0, i+1)
在使用new
运算符分配之后执行。