带阵列的简单C程序无法打印正确的输出

时间:2013-07-23 17:00:03

标签: c gcc

我写了这个令人难以置信的愚蠢代码

#include <stdio.h>
main(){
    int new[10], i;
    for(i=1; i<=10; ++i){
            new[i] = 0;
            }

for(i=1;i<=10; ++i)
            {
                    printf("%d", new[i]);
            }
 }

我在Xubuntu上使用GCC编译了这个,然后执行了./a.out。光标只是闪烁,导致无输出。尝试使用gdb进行调试时也是如此。它运行然后保持闪烁的光标。

任何帮助?

3 个答案:

答案 0 :(得分:9)

C数组被索引为0 - 您的程序在new数组的边界之外写入,因此它会导致未定义的行为。在这种情况下,您可能会覆盖i变量,因此最终会出现无限循环。你需要改变你的循环:

for (i = 0; i < 10; i++)
{
    new[i] = 0;
}

for (i = 0; i < 10; i++)
{
    printf("%d", i);
}

答案 1 :(得分:1)

你需要有一个新的行字符来查看输出,或者刷新标准输出,否则有时它不会打印,或者它将与下一行结合...尝试:

printf("%d\n", new[i]);

另外,将for循环设置为0到9

答案 2 :(得分:1)

int new[10] - 这里new数组可以存储10个整数类型的元素。您可以从数组的第0到第9个索引访问这些元素。访问超过第9个索引是未定义的行为。