标准输入函数

来源:互联网 发布:信息安全 人工智能 编辑:程序博客网 时间:2024/06/06 08:59

scanf ,getcher,gets,fgets区别?

都是把数据输到输入缓存器中,遇到结束标记把数据给所定义的变量。

scanf遇到回车或空格结束,并且回车与空格保存在缓存器中。

getchar遇到回车与空格结束,并且回车与空格保存在缓存器中。

gets遇到回车结束,在字符输入完成后加\0,缓存器中\n清除。

fgets遇到回车结束,在字符输入完成后加\n和\0.当然这是在长度足够的情况下,不够就加字符串结束标记\0.,缓存器中\n已经为提出。

用scanf和gets,fgets等函数输入给字符时,假设定义的长度为10,却可以输入大于10个的字符,这是为什么?

我们定义一个变量,实际上是向操作系统申请一段内存。

比如上述程序的char a[10],系统会给它分配一段连续的内存块用来存放数据。
这个内存块是随机的,它可以是目前空闲的任意一个内存段。
由于这个不确定性,所以它后面的内存块有两种可能:
如果恰好这段内存的后面的内存段没有被其他程序占用,那么我们对它进行使用是不会出错的。

这是输出字符串则会输出超过长度的字符,%s以\0结束。

就是你上述的超过10个还可以输入输出。但是它随时可能被其他程序修改得不到保证。
但是因为这段内存不属于本程序管理,它也有可能被其他程序占用,或者干脆就是操作系统禁止访问的区域,这时候就必定会导致错误了。

0 0
原创粉丝点击