这样为什么不行?解决方案
这样为什么不行?C/C++ code#include stdio.hint main(void){char a[5]int ifor(i 0 i 5 i++){sc
这样为什么不行?
C/C++ code#include <stdio.h>int main(void){ char a[5]; int i; for(i = 0; i < 5; i++) { scanf("%d",a[i]); } for(i = 0; i < 5; i++) { printf("%d",a[i]); } return 0;}
运行时,输入数据就报内存错误,是怎么回事
[解决办法]scanf("%d",a[i]);
要从scanf格式化的实现原理来讲,你一错就错了两个地方:
1,&a[i],传入地址才能被scanf填充内存
2,scanf("%c", &a[i]),你使用%d,那么scanf将访问&a[i]地址开始的4个字节当做int进行赋值,当循环到i=2的时候就内存越界操作了。
[解决办法][解决办法]C/C++ code#include <stdio.h>int main(void){ char a[2]; int i; gets(a); for(i = 0; i < 1; i++) { printf("%s",&a[i]);//Be Careful。 } return 0;}
[解决办法]
[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。