当我在C中打印数组时,为什么我会出现分段错误?

时间:2014-03-15 06:32:25

标签: c arrays

使用SEGFAULT循环使用printf打印数组时遇到for问题。这是我的来源:

   #include <stdio.h>

int main(){
        int a;
        int b[4];
        unsigned short i;
        scanf("%i", &a);
        for(i = 0; i <= 3; i++){
                b[i] = a % 10;
                a = a / 10;
        }
        for(i = 3; i >= 0; i--){
                printf("%i\n", b[i]);
        }
        return 0;
}

我在第13行遇到了错误:

13          printf("%i\n", b[i]);

4 个答案:

答案 0 :(得分:3)

i的类型为unsigned short,但在你的for循环中:

for(i = 3; i >= 0; i--)

i >= 0永远不会是假的,因为i是无符号的。只需将i更改为签名类型:

int i;

,没关系。

答案 1 :(得分:2)

由于我是unsigned short int,第二个for loop不会终止,i的值将继续为:

3
2
1
0
65535
65534
65533
..

答案 2 :(得分:1)

您声明了unsigned short i,因此i始终为>= 0,您永远不会退出循环。

更改unsigned short i;的{​​{1}}。

答案 3 :(得分:1)

更改for循环以将数组b打印到此

for(i = 3; i > 0; i--){
    printf("%i\n", b[i]);
代码中的

i&gt; = 0 在i = 0时评估为true,因此 i - 正在递减到65535,然后它尝试访问 b [65535] 会导致无效访问。