内容简介:在Linux下编译C语言,用到gets这个函数,代码如下:#include <stdio.h>#include <string.h>
在 Linux 下编译C语言,用到gets这个函数,代码如下:
#include <stdio.h>
#include <string.h>
#include <string.h>
void main(){
char s[100]; // 存放输入的字符串
int i, j, n;
printf("输入字符串:");
gets(s);
n=strlen(s);
for(i=0,j=n-1;i<j;i++,j--)
if(s[i]!=s[j]) break;
if(i>=j)
printf("是回文串\n");
else
printf("不是回文串\n");
}
但是出现如下警告,
[linuxidc@localhost linuxidc.com]$ gcc linuxidc.c -o linuxidc.com
linuxidc.c: 在函数‘main’中:
linuxidc.c:8:5: 警告:不建议使用‘gets’(声明于 /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(s);
^
/tmp/ccvwVatT.o:在函数‘main’中:
linuxidc.c:(.text+0x1f): 警告:the `gets' function is dangerous and should not be used.
原因就在于,gets不会去检查字符串的长度,如果字符串过长就会导致溢出。如果溢出的字符覆盖了其他一些重要数据就会导致不可预测的后果。在man手册里也有关于gets这样的警告:
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security.
可以用scanf的扫描集来实现这一功能,只要在方括号中写入“^\n”,即:直到输入了回车才停止扫描。下面来演示这一用法:
#include <stdio.h>
#include <string.h>
#include <string.h>
void main(){
char s[100]; // 存放输入的字符串
int i, j, n;
printf("输入字符串:");
scanf("%[^\n]",s); //改成这个就OK
n=strlen(s);
for(i=0,j=n-1;i<j;i++,j--)
if(s[i]!=s[j]) break;
if(i>=j)
printf("是回文串\n");
else
printf("不是回文串\n");
}
OK,问题解决。
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-12/155699.htm
以上所述就是小编给大家介绍的《Linux C语言gets函数出现的警告问题解决》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- c – 我可以在不禁用“将警告视为错误”的情况下排除某些特定警告吗?
- PHP警告:除以零
- iOS工程的警告修复
- 用了@Autowired注入,竟然被警告
- iOS去除Xcode代码警告
- PHP Session的一个警告
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
从“为什么”开始
[美] 西蒙·斯涅克 / 苏西 / 海天出版社 / 2011-7 / 32.00元
影响人类的行为:要么靠操纵,要么靠感召。 操纵带来的是交易,是短期效益; 感召带来的是信任,是永续经营! 盖茨走后,微软面临怎样的挑战?后盖茨时代,微软为何从一个希望改变世界的公司沦落为一个做软件的公司? 沃尔玛的灵魂人物过世后,一度被人们热爱的公司,遭到的竟然多是顾客、员工的反感?沃尔玛要怎样做才能重放昔日光彩? 星巴克吸引人们购买的不是咖啡,而是理念?为什么说霍华......一起来看看 《从“为什么”开始》 这本书的介绍吧!