首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言中scanf内部扫描赋值的机制。考验幼功的时候到啦!

2013-01-28 
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;
}

[解决办法]
引用:
引用:引用:引用:1. 读取三个参数的数据  入栈
2. 根据格式控制字符串读取stdin的数据 按照指定格式写入后面的参数

在函数开始执行之前 函数调用的准备工作已经读取了i的值 这时候只能拿到垃圾值 即 a[垃圾值] 
于是崩溃

你的指望scanf……
读取缓冲区的数据那是在 scanf函数执行过程中做的事情 
scanf 开始执行之前 从内存中读取 i 的值 i是垃圾值 a[i]悲剧
[解决办法]
scanf("%d,%d",&a[i],&i);
压参的时候压的是地址,即a[i]的地址,但很明显,由于i没有初始化,a[i]是个不确定的“对象”,压了个不知什么“东西”的地址。

热点排行