关于C语言中字符串处理函数fgets的用法

如果定义了两个字符数组a[10]b[10]然后连续用两个fgets(a,11,stdin);fgets(b,11,stdin);然后用两个puts依次打印出两个字符数组的... 如果定义了两个字符数组a[10] b[10]
然后连续用两个
fgets(a,11,stdin);
fgets(b,11,stdin);
然后用两个puts依次打印出两个字符数组的内容.
如果第一次输入的时候超过了10个字符(其中没有按回车键).
那么在第一次回车后会显示两个字符串的内容,第一次输入的多于10个的字符保存到了第二个字符数组中。
请问这是为什么?fgets不是行缓冲输入吗?
具体例子如下:
#include"stdio.h"
#include"string.h"
void main()
{
char str1[10];
char str2[10];
fgets(str1,11,stdin);
fgets(str2,11,stdin);
printf("%s\n%s\n",str1,str2);
printf("%c\n",str2[0]);
}

输入asdfasdfasdf123

回车后直接输出两组字符串
asdfasdfas
df123

请具体讲解一下。我是初学的,多包涵啊~
展开
 我来答
百度网友5311d79
2011-05-06 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3400万
展开全部
字符串超长,fgets读了size-1个字符还没有读到'\n',就把已经读到的size-1个字符和一个'\0'字符存入字符数组,剩下的字符可以在下次调用fgets时继续读。
输入asdfasdfasdf123,第一次fgets只取走了前10个字符,余下的df123被下一次fgets取走了。
另外,还有两点:
1)包含的是系统头文件,建议用如下形式:
#include <stdio.h>
#include <string.h>
2)你这里fgets中size指定为11,而定义字符数组时,大小却为10,这样会溢出的。 你这里运行没问题是因为字符数组的数组名作参数时被自动转换为字符指针了。
苦学究不问渔G
2011-05-06 · TA获得超过408个赞
知道小有建树答主
回答量:306
采纳率:0%
帮助的人:181万
展开全部
fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。

参考资料: http://baike.baidu.com/view/656654.htm

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晨曦软海
2011-05-06
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
#include"stdio.h"
#include"string.h"
void main()
{
char str1[10]; //定义字符数组str1
char str2[10]; //同上
fgets(str1,11,stdin);// 从流中读入10个字符 即 asdfasdfas
fgets(str2,11,stdin); //从流中读入10个字符 即 df123由于后面没有而你又敲了回车于是就读入‘\n’
printf("%s\n%s\n",str1,str2);// **打印str1后 换行 由于前面的str2读入了‘\n’时打印了两排空行
printf("%c\n",str2[0]); //打印str2中的第一个元素,用于检测str2
}

输入asdfasdfasdf123

你的输出
asdfasdfas
df123

//注意这儿是两行空白
d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liulin0017
2011-05-06 · 超过15用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:48.1万
展开全部
fgets的输入时这样的:一直输入都放在stdin键盘缓冲区中,所以stdin就有asdfasdfasdf123这些。
你可以一直输入 它都放在标准流里stdin中,然后你可以取,之前的11个代表10个字符和一个结束位'\0',然后stdin中就剩下其他的df123

参考资料: fgets getchar

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式