C语言中未初始化的整型数组为何会填充看似垃圾的数据?
数组里的随机数据是正常现象,原因如下:
- C语言里的局部数组(比如你定义的
numbers)在声明时不会自动初始化。这类变量存在栈内存中,而栈空间可能残留着之前程序运行、函数调用留下的旧数据,这些数据对你来说就像是“随机值”。 - 你的代码只给数组的前
index个元素赋了值(对应用户输入的每个数字),剩下的20 - index个元素完全没被修改过,所以它们保留着栈里的原始残留数据。 - 不过放心,你的代码逻辑并没有访问这些未初始化的元素——输出循环是
for (int i = 0; i < index; i++),只遍历了已经赋值的部分,所以这些随机数据不会影响程序的最终输出。
如果不想看到这些随机数据,可以在声明数组时手动初始化,比如改成:
int numbers[20] = {0};
这样数组里所有元素都会被初始化为0。
你的代码:
int main() { int numbers[20], index; index = 0; int num = getchar(); while (num != '\n') { numbers[index] = num - 48; // ASCII "0" starts at 48 index++; num = getchar(); } for (int i = 0; i < index; i++) { printf("%d", numbers[i]); } printf("\n"); return 0; }
内容的提问来源于stack exchange,提问作者Markix
相关产品推荐
相关产品推荐

