有一个基本的 C++ 问题。我发现未初始化的字符数组的长度 > 0。有人可以解释一下吗?
#include <iostream>
int main() {
char test1[5];
test1[4] = 0;
printf("test1 array %s, length %d\n", test1, strlen(test1));
char test2[128];
test2[127] = 0;
printf("test2 array %s, length %d\n", test2, strlen(test2));
}
这会打印(为什么第一个数组为空和零长度,第二个数组为非空和非零长度)?:
test1 array , length 0
test2 array 8??, length 6
最佳答案
由于您还没有初始化这些值,您将得到未定义的行为。也就是说它们可以包含任何东西。也许是零,也许是随机数据。
将未初始化的字符缓冲区传递给 printf
是未定义的行为,不应这样做。这可能有效,也可能无效。获得已定义行为的唯一方法是正确初始化它。
关于C++空字符数组的长度> 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402212/