gets的一点疑问

gets函数: 从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。
换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。 
puts函数:在输出是将字符串结束标志'\0'换位'\n',即输出字符串后换行。

#include <stdio.h>
#include <string.h> 
#define N 6
void main()
{
char s1[N],s2[N],s3[6],s4[6];
scanf("%s%s",s1,s2);
gets(s3);
gets(s4);
puts(s1);puts(s2);
puts(s3);puts(s4);
return 0;
}
如果输入如下字符串:
123 321
456 654
输出结果是:
123
321

456 654
其中,s1=123  s2=321  s3=NULL   s4=456 654.
因为,scanf和cin等输入函数,会自动识别 ‘ ’和 '\n' 等符号,当出现这些符号时,就自动判定输入结束,所以这些字符仍然存在于缓存中。
在接下来的gets(s3)会先把缓存中的'\n'读取了,于是你输出的就是一个空行(NULL看不见)。
永不止步步 发表于02-09 09:19 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308117个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号