编程小白碰到c语言中gets

碰到问题:

当执行下面的程序时,如果输入ABC,则输出结果是(    )。
#include <stdio.h>
#include <string.h>
int  main()
{ char ss[10]="1,2,3,4,5";
gets(ss);

strcat(ss, "6789");

printf("%s\n",ss);
}

(A) ABC6789  (B) ABC67    (C) 12345ABC6   (D) ABC456789

思路分析:

作为一个基础不大好的编程小白 咦,gets是什么鬼?先缓一缓,先看看后面的.

有意识的话 strcat应该能猜到是什么,和上一篇中的函数strcpy长得及其相似(都有str...),而且题目中的头文件也有#include<string.h>,幸好这会不是考试,这个时候不懂,不会做,百度.

即:strcat(str,ptr)是将字符串ptr内容连接到字符串str后,然后得到一个组合后的字符串str

理论分析应该就是strcat(ss,"6789")=====>ss + "6789"

查询了gets的用法:

gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

到这里的时候我其实猜测答案应该是C,我想的是前面已经是12345,再输入ABC,后面追加6789,即输出结果为12345ABC6,然后我用编译器操作了一下,结果不对.

输出结果是ABC6789,咦,郁闷了!为什么?凭什么?不应该啊???

然后找到了科学的解释:gets输入了值会覆盖ss中原有的内容

执行代码:

#include<stdio.h>
#include<string.h>
int main()
{
	char ss[10]="1,2,3,4,5";
	gets(ss);
	strcat(ss,"6789");
	printf("%s\n",ss);
	return 0;
 } 

测试:

输入ABC,结果为:

本着杠精的原则,输入12345,结果为:

等等ss[10]不应该有10个么,算上字符串尾的结束符"\0"在内,好像"ABC6789"缺点东西

只输入A,测试一下:

咦,奇怪,搞长一点试试:

哎哟我的天,什么情况?不应该这么长吧,这不止10个吧?

遇到事情不要慌,根据刚才收集的知识,仔细分析,得出:gets()函数存在一个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装得下输入行。

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值