代码之家  ›  专栏  ›  技术社区  ›  Markix

为什么在C中,一个空的整数数组中充满了看似垃圾的数据?

  •  0
  • Markix  · 技术社区  · 6 月前

    我目前正在学习C,同时跟随 The C Book 其中一个练习是编写一个程序,让用户输入一个数字,然后程序会吐出来。

    在对代码进行故障排除时,我注意到我输入数字的数组中填充了。。。随机数据?

    enter image description here

    我觉得这很奇怪。这正常吗?如果是这样,为什么会发生这种情况?

    这是我的代码:

    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;   
    }
    
    1 回复  |  直到 6 月前
        1
  •  0
  •   Chris    6 月前

    静态数组或全局范围内的数组将被初始化。具有自动存储持续时间的本地阵列,如您的 numbers 不能保证被初始化,并且它们包含的值是不确定的。可能性包括你看到的“垃圾”值。

    使用这些值而不初始化它们会导致 undefined behavior .

    值得注意的是,这里真正的危险是他们 能够 如你所愿。也许你在调试模式下编译,数组确实被初始化为包含零。据你所知,你的程序运行良好。然后,您在发布模式下编译,您认为有效的代码开始出现非常奇怪的错误。

    在上编译警告将有助于识别未定义行为的来源。编译警告如下 错误 将迫使你处理这些警告。