|
10鱼币
本帖最后由 压寨宝宝 于 2013-1-23 16:59 编辑
- #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);
复制代码 这样也不行。
谢谢各位热心的朋友啦!~~~~~~~~~~
|
最佳答案
查看完整内容
既然你问了,我就反汇编解释一下
程序段初始化不说了,直接看这句:
4: int a[20],i;
5: scanf("%d,%d",&i,&a);
0040102E 8B 45 AC mov eax,dword ptr [ebp-54h] ;[ebp-54h]是变量i的内容,VC的 debug模式下,初始是0xCCCCCCCC
00401031 8D 4C 85 B0 lea ecx,[ebp+eax*4-50h] ;ebp-50h是数组a的起始地址,其中eax*4是偏移,因为此时的i是0xCCCC ...
|