动态字符数组没有给出正确的字符串长度

时间:2012-08-13 21:26:52

标签: c++ memory-management char

我想要一个动态字符数组,其长度等于循环迭代。

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之间。

3 个答案:

答案 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

相关问题