Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态字符数组没有给出正确的字符串长度?_C++_Memory Management_Char - Fatal编程技术网

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

C++ 动态字符数组没有给出正确的字符串长度?,c++,memory-management,char,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; } char*输出; 对于(短i=0;i输出所指向的新分配内存未初始化:它可能有任何内容 strlen要求其参数是指向以null结尾的字符串的指针,而output不是

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

char* output;
for (short i=0; i<2; i++){
    output = new char[i+1];
    printf("string length: %d\n",strlen(output));
    delete[] output;
}
char*输出;

对于(短i=0;i输出所指向的新分配内存未初始化:它可能有任何内容


strlen
要求其参数是指向以null结尾的字符串的指针,而
output
不是,因为它尚未初始化。调用
strlen(output)
导致程序显示未定义的行为,因为它读取未初始化的内存。任何结果都是可能的。

输出所指向的新分配内存未初始化:它可能有任何内容


strlen
要求其参数是指向以null结尾的字符串的指针,而
output
不是,因为它尚未初始化。调用
strlen(output)
导致程序显示未定义的行为,因为它读取未初始化的内存。任何结果都是可能的。

strlen希望在字符串末尾找到NULL,它统计所有字符,直到找到一个0

您应该将行更改为
output=new char[i+1]();
要将字符初始化为0

strlen希望在字符串末尾找到NULL,它会统计所有字符,直到找到0

您应该将行更改为
output=new char[i+1]();
要将字符初始化为0,在C中,字符串以null结尾。
strlen()
返回在找到null结尾之前计数的字节


new
运算符不保证内存块的字节为零


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

在C中,字符串以空结尾。
strlen()
返回在找到空结尾之前计数的字节


new
运算符不保证内存块的字节为零


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

因此,我假设
输出
仍将具有正确的内存大小,尽管
strlen
的行为未定义?
输出
将指向I+1
字符
对象的数组,是的。
strlen
函数不计算数组的大小,而是计算空终止字符串的长度因此,我假设
output
仍将具有正确的内存大小,尽管
strlen
的行为未定义?
output
将指向I+1
char
对象的数组,是的。
strlen
函数不计算数组的大小,而是计算空-t的长度终止字符串
new
运算符不保证内存块的字节为零。要初始化数据,请使用
output=new char[i+1]();
可能重复的
new
运算符不保证内存块的字节为零。要初始化数据,请使用
output=new char[i+1]()在C++问题中不允许使用C Voodoo。可以用新的初始化:<代码>输出=新char [i+1](;)/<代码>是的,没有想到使用空构造函数,但是,<代码> STROLN()<代码> > <代码> >代码>。在C++问题中不要使用C Voodoo。可以使用新的初始化:<代码>输出=新char [i+1](;)/<代码>是的,没有想到使用空构造函数,但是,<代码> STRLUNE()/<代码>在<代码> <代码>中。