使用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]);
答案 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] 会导致无效访问。