我想要一个动态字符数组,其长度等于循环迭代。
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之间。
答案 0 :(得分:7)
output
指向的新分配的内存未初始化:它可能包含任何内容。
strlen
要求其参数是指向以空字符结尾的字符串的指针,output
不是,因为它尚未初始化。调用strlen(output)
会导致程序显示未定义的行为,因为它会读取此未初始化的内存。任何结果都是可能的。
答案 1 :(得分:0)
strlen期望在字符串的末尾找到NULL,它会计算所有字符,直到找到0
您应该将行更改为output = new char[i+1]();
以将字符初始化为0
答案 2 :(得分:0)
在C中,字符串以空值终止。 strlen()
返回计数的字节,直到找到空终止。
new
运算符不保证内存块的字节为_zero_ed。
您可以使用calloc()
,它将所分配的块的所有字节清零,或者在使用memset(output, 0, i+1)
运算符分配后需要new
。