c语言中scanf内部扫描赋值的机制。考验幼功的时候到啦!
c语言中scanf内部扫描赋值的机制。考验基本功的时候到啦!~~~~#includestdio.hint main(){int a[20],isca
c语言中scanf内部扫描赋值的机制。考验基本功的时候到啦!~~~~
#include<stdio.h>
int main()
{
int a[20],i;
scanf("%d,%d",&i,&a[i]);
return 0;
}
我已经知道了程序出错在scanf处,然后发现原因可能是i的值在一个scanf里面不能及时传送到后面要输入进去的a的i里面然后会导致段异常之类的错误。。我个人的猜测是,输入完成后,scanf先扫描缓冲区的第一个数值,然后赋给i,接着扫描第二个数值,接着赋给a,那么此时的a应该是指定了哪个元素了的。现在假定i不大于20吧。
但是事实上这样的代码运行时程序会自动出错中断。
那么,scanf内部扫描赋值的真实过程是什么呢???
但是我现在不讨论其规范性,我就是想单纯的知道起内部的过程。谢谢各位啦!~~~~~~~
另外scanf中赋值顺序调换是不起作用的!
即:
#include<stdio.h>
int main()
{
int a[20],i;
scanf("%d,%d",&a[i],&i);
return 0;
}
[解决办法]读取缓冲区的数据那是在 scanf函数执行过程中做的事情
scanf 开始执行之前 从内存中读取 i 的值 i是垃圾值 a[i]悲剧
[解决办法]scanf("%d,%d",&a[i],&i);
压参的时候压的是地址,即a[i]的地址,但很明显,由于i没有初始化,a[i]是个不确定的“对象”,压了个不知什么“东西”的地址。