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接受不到带空格的串
...全文
398 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()我自己写的 很好用

69,369

社区成员

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

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