在c语言中怎样使用gets()函数!

#include<stdio.h>main(){charm[15];scanf("%s",m);/*输入haoareyou!*/gets(m);printf("%s",m... #include<stdio.h>
main()
{
char m[15];
scanf("%s",m); /*输入 hao are you!*/
gets(m);
printf("%s",m);
}
请问这个程序哪里出错了?
展开
 我来答
小婷陪你看世界
高粉答主

2018-03-31 · 关注小婷,让小婷陪你一起看美丽世界
小婷陪你看世界
采纳数:28409 获赞数:381125

向TA提问 私信TA
展开全部

gets从标准输入设备读字符串函数,可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

1、从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

2、读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。

3、本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际上可以读取标准输入(即大多数情况下的键盘输入),具体参阅fgets词条)来替换gets()。在V7的手册(1979年)中说明:为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区。

4、gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。其调用格式为:gets(s);其中s为字符串变量(字符串数组名或字符串指针)。

lyhdez1
推荐于2017-09-24 · TA获得超过1942个赞
知道小有建树答主
回答量:687
采纳率:100%
帮助的人:843万
展开全部
这个程序没有错啊。
输入hao are you!的时候
第一个scanf语句以空格作为结束符,故只接受了输入缓冲区的hao。
之后执行gets,m的内容被覆盖。而缓冲区的内容剩下" are you!",所以m的值为" are you!"这就是结果了。
追问
若要让程序输出“how are you!”程序该怎么写?
追答
去掉scanf语句。或者输入"hao hao are you!"
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
韧劲9
推荐于2017-09-11 · TA获得超过9224个赞
知道小有建树答主
回答量:1638
采纳率:92%
帮助的人:354万
展开全部
getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)。
所以你在输入“12”回车后,“1”首先被读入,“2”和回车还在输入缓冲区里,被后面的getchar()依次读入。所以有这样的运行结果。
这是getchar()使用的不方便的地方。解决方法:
(1)使用下面的语句清除回车:
while(getchar()!='\n');
(2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h> 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wlg1091557947
2012-05-13 · TA获得超过890个赞
知道小有建树答主
回答量:625
采纳率:25%
帮助的人:525万
展开全部
scanf("%s",&m);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
home等我_回来
2018-12-16
知道答主
回答量:1
采纳率:0%
帮助的人:796
展开全部
scanf("%s",m); /*输入 hao are you!*/
m前要加&
scanf("%s",&m); /*输入 hao are you!*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式