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]();
要将字符初始化为0strlen希望在字符串末尾找到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+1char
对象的数组,是的。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()/<代码>在<代码> <代码>中。