zoukankan      html  css  js  c++  java
  • 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("
     输入任意字符 : ");
     9 
    10    fgets(name, 20, stdin);//stdin 意思是键盘输入
    11 
    12    fputs(name, stdout); //stdout 输出
    13 
    14    return 0;
    15 }

    根据以上改动后,果然没有了warning,但是调试了n久的一个程序,确实怎么也没有正确结果,最后step跟踪,才发现了问题所在!那就是:
    gets从终端读入是的字符串是用结束的,而fgets是以 结束的(一般输入都用ENTER结束),然后strcmp两者的时候是不会相等的!

    所以建议大家还是继续让它warning吧。。为了正确性!


    这个问题主要应该是因为linux 和 windows的文件在换行符上编码不一样导致的,linux的换行是,windows的换行是13,是两个字符。

    但是的文件应该是在windows下编译的,所以导致会出现两字符不匹配。建议可以在linux终端下,利用dos2unix filename,来将换行符处理一下,应该就OK了

    参考:

    http://hi.baidu.com/zojoyo/blog/item/134874c89b9b94107f3e6fc3.html

     

    http://hi.baidu.com/laoniaoyiren/blog/item/95a0862b291c5124d42af1cd.html/cmtid/e89b2c1fd0c330fb1ad57625

  • 相关阅读:
    json 拼二维json数组
    lnmp 环境搭建
    lnmp git ruby sass 安装
    制定clone的用户名
    git branch 重命名
    sql命令创建数据库
    layerui
    弹出确认框,打开新窗口
    Ajax请求小结
    .net core注入服务
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/6267599.html
Copyright © 2011-2022 走看看