C程序编译告警的问题

zjgxwx 2017-08-20 10:05:35
在noi的C编译环境上,我使用gets()函数竟然提示warning:

string_search.c:8:5: warning: 'gets' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(word);
^
/home/noilinux/MyCsource/string_search.c:8: warning: the `gets' function is dangerous and should not be used.

那么问题来了,gets函数哪里危险?既然gets不推荐使用,那么有没有其它函数替代,貌似scanf %s接受不到带空格的串
...全文
401 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-21
  • 打赏
  • 举报
回复
fgets(buf,len,stdin)
大米粥哥哥 2017-08-21
  • 打赏
  • 举报
回复
用gets_s 替代gets
自信男孩 2017-08-21
  • 打赏
  • 举报
回复
gets是存在风险的,因为它不会检查输入的数据是否已经超过了缓存buffer的长度。比如

char buf[5];
gets(buf);
如果输入的字符串时hello,那么就会越界了。但是gets不会提示也不会截断输入的hello字符串; 建议使用fgets,如上面的代码,用fgets替换,
char buf[5];
fgets(buf, 5, stdin);
则输入hello,它会将hello截断,只将hell复制到buf里,并加上'\0' 建议编写一个小程序试一下,fgets也有另一个需要注意的,建议测试的能够发现。
zhagoodwell 2017-08-20
  • 打赏
  • 举报
回复
int Getchar(charchar *A,int min,int max)//输入的字符串长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度        
{        
    int B,C;      
 do{        
        A[max]=B=C=0;    
        while((A[B++]=getchar())!='\n'&&B<max);    
        if(A[B-1]!='\n')while(getchar()!='\n'&&++C);        
        else A[--B]=0;     
    if(C||B&&B<min)    
       printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);        
    }while(C||B<min);        
    return B;      
} 
zhagoodwell 2017-08-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhagoodwell/article/details/77422530 开头就有 Getchar()我自己写的 很好用
PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。 …………………… 就是一个纠错工具 下面是更为详细的信息 ………………………… LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都 把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查 ,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关, 那么要给出关闭这些开关的正当理由。 可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消 除所有的LINT告警,我们就不会遇到象今天这么多的告警信息。即使在今天,我们如果能 抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就是很容易的了。 我们程序质量的提高也是不言而喻的。 PC-LINT是GIMPEL SOFTWARE公司的产品,其中的内容是非常广泛的,光是选项就有30 0多个,涉及到程序编译及语法使用中的方方面面。本篇培训材料旨在引导读者入门,学会 PC-LINT的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地 使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。 1.概述 如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可 以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求, 但很可能是潜在的、不易发现的错误。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧