1

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

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。

4

3 回答 3

7

指向的新分配的内存output没有初始化:它可能有任何内容。

strlen要求它的参数是一个指向以 null 结尾的字符串的指针,这output不是,因为它还没有被初始化。该调用strlen(output)会导致您的程序表现出未定义的行为,因为它读取了这个未初始化的内存。任何结果都是可能的。

于 2012-08-13T21:28:06.723 回答
0

strlen 期望在字符串的末尾找到 NULL,它会计算所有字符,直到找到 0
您应该更改行以output = new char[i+1]();将字符初始化为 0

于 2012-08-13T21:28:08.850 回答
0

在 C 中,字符串以空值结尾。strlen()返回计数的字节,直到找到该空终止。

new运算符不保证内存块的字节将被 _zero_ed。

您可以使用calloc(),它将它分配的块的所有字节归零,或者您需要memset(output, 0, i+1)在使用new运算符分配之后执行。

于 2012-08-13T21:40:10.940 回答