warning: the `gets' function is dangerous and should not be used.(转)
Posted 极客先锋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了warning: the `gets' function is dangerous and should not be used.(转)相关的知识,希望对你有一定的参考价值。
今天在LINUX下编译C程序时,出现了:
warning: the `gets‘ function is dangerous and should not be used.
这个warning。
百度之后,得知
问题出在程序中使用了 gets ,Linux 下gcc编译器不支持这个函数,解决办法是使用 fgets
1 fgets()函数的基本用法为: 2 3 fgets(char * s,int size,FILE * stream);//eg:可以用fgets(tempstr,10,stdin)//tempstr 为char[]变量,10为要输入的字符串长度,stdin为从标准终端输入。
1 /* 代码实现 */ 2 3 #include <stdio.h> 4 int main ( ) { 5 6 char name[20]; 7 8 printf("\n 输入任意字符 : "); 9 10 fgets(name, 20, stdin);//stdin 意思是键盘输入 11 12 fputs(name, stdout); //stdout 输出 13 14 return 0; 15 }
根据以上改动后,果然没有了warning,但是调试了n久的一个程序,确实怎么也没有正确结果,最后step跟踪,才发现了问题所在!那就是:
gets从终端读入是的字符串是用\0结束的,而fgets是以\n结束的(一般输入都用ENTER结束),然后strcmp两者的时候是不会相等的!
所以建议大家还是继续让它warning吧。。为了正确性!
这个问题主要应该是因为linux 和 windows的文件在换行符上编码不一样导致的,linux的换行是\0,windows的换行是\13\0,是两个字符。
但是的文件应该是在windows下编译的,所以导致会出现两字符不匹配。建议可以在linux终端下,利用dos2unix filename,来将换行符处理一下,应该就OK了
参考:
http://hi.baidu.com/zojoyo/blog/item/134874c89b9b94107f3e6fc3.html
以上是关于warning: the `gets' function is dangerous and should not be used.(转)的主要内容,如果未能解决你的问题,请参考以下文章
启动 mysql 失败 Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '
caffe编译nvcc warning:The 'compute_20', 'sm_20'
WARNING: The host 'WeiLei' could not be looked up with resolveip.
warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 6.0, but
DataTables warning: Requested unknown parameter '0' from the data source for row '0'
WARNING: The host '$hostname' could not be looked up with resolveip. (转)