当我“cout”一个空阵列时,我得到了胡言乱语。为什么呢?
int main() { char test[10]; cout << test; return 0; }
...返回一些unicode blather。一个简单的答案我敢肯定。
答案 0 :(得分:8)
因为您的数组未初始化。它的内容可以是任何内容,并且使用它们会得到未定义的行为。
您可以将它们全部初始化为零:
char test[10] = {};
打印时,不会打印任何内容。
答案 1 :(得分:4)
由于你没有初始化数组,你得到了一个垃圾值(test [0]就是你打印出来的)。
初始化:
int main() {
char test[10] = {};
cout << test;
return 0;
}
请注意:
仅仅因为一些编译器初始化东西(比如某些编译器初始化整数,浮点数等,在0),情况并非总是如此,否则你可以得到一个垃圾值。
答案 2 :(得分:4)
C ++中没有“空数组”这样的东西。你定义了一个10 char
s的数组 - 你有一个10 char
的数组。因为它是一个本地数组,所以默认情况下它是未初始化的,这意味着10 char
中的每一个都包含垃圾。垃圾就是你打印的。
答案 3 :(得分:1)
您的数组未初始化为任何内容,并且您正在输出该未初始化数组的第一个元素。
如果你想要可预测的行为,你需要先初始化数组(以下初始化为一个空数组):
int main() { char test[10] = {}; cout << test; return 0; }
答案 4 :(得分:0)
没有初始化的数组将填充之前占用内存的任何内容,这就是您在输出中设置的内容。值得注意的是,您可能会看到调试和发布编译之间的差异。许多编译器会在调试模式下自动初始化变量,并将其作为编译器设置。你不应该依赖于此。有几种方法可以初始化字符数组。
简单
char test[10] = {};
有一些文字
char test[] = "some text";
作为个别角色
char test[] = { 's', 'o', 'm', 'e' };
第一个值集(对于字符串,这是一个空字符串'\ 0'被视为终结符
char test[] = { 0 };
或者像这样。
char test[];
test[0] = '\0';
还记得数组和指针等价
哪里
char* test = "some text";
与...相同
char test[] = "some text";