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

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

warning: the `gets' function is dangerous and should not be used.(转)

时间: 2024-08-13 22:18:53

warning: the `gets' function is dangerous and should not be used.(转)的相关文章

linux系统下,警告:warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration] 和 warning: the `gets&#39; function is dangerous and should not be used. 的由来和解决方法。

字符数组 的英文名字是 char [] gets()函数的基本用法为:char *gets(char *s); 该函数的参数是一个字符数组,该函数的返回值也是一个字符数组. linux下的代码如下: 1 #include <stdio.h> 2 3 int main() 4 { 5 char a[100] = { 0 }; 6 gets(a); 7 printf("%s\n", a); 8 return 0; 9 }-----------------------------

centos6.5 rpm安装glusterfs以及第三方测试工具

这篇文章适合初学者读,做下实验来之后对glusterfs有一个初步的了解,我的所有操作都是在一台机器上做的.还有一些环境配置我列举了一下,并没有很详细的列出来,相信大家应该没问题.一些第三方测试工具需要大家自行在网上下载.楼主也是一个一个下载下来的.此次下载的是3.47的版本,因为我们公司用的就是这个版本,之前试过其它版本,老是会出现服务挂起的现象,没有办法,版本回退 glusterfs  rpm包下载地址: https://download.gluster.org/pub/gluster/gl

数据库编程4 Oracle Pro*C/C++开发

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 1,上次难点复习 1 求所有部门的平均奖金 2 求各部门的平均薪水 3 求各部门每个工种的平均薪水 4 求各部门每个工种大于2000的平均薪水 5 求10号部门的平均工资(2种写法) 6 创建一个学生表 7 并向表中插入一条数据 8 列出不是管理层的员工: 9 工资最高前10名的员工信息(rownum是一个属性值) 10 找到各部门大于本部门平均薪水的员工: 11 创建索引 Linux 环境 Oracle  

Linux 下使用C语言 gets()函数报错

在Linux下,使用 gets(cmd) 函数报错:warning: the 'gets' function is dangerous and should not be used. 解决办法:采用 fgets(cmd,100,stdin);//100为size 问题解决! fgets从stdin中读字符,直至读到换行符或文件结束,但一次最多读size个字符.读出的字符连同换行符存入缓冲区cmd中.返回指向cmd的指针. gets把从stdin中输入的一行信息存入cmd中,然后将换行符置换成串结

GCC,GDB,Makefile和IO复用函数

2015.1.22 c高级的环境搭建:GCC编译器:全称 GUN CC,是GNU工具(tool chain)的一种,源码编译成机器码,gcc的编译依赖于很多小工具4.3.3和3.4.3版本的比较稳定 GCC编译分为四个步骤:(用WC命令可以分别查看每个阶段代码的大小,可以比较一下,ls -l 也能看出大小) 1.预处理 ->cpp预处理文件*.i gcc -E2.编译 ->cc1汇编文件*.s gcc -S3.汇编 ->as汇编文件*.o gcc -c4.链接 ->ld可执行文件*

输入带空格字符串的两种方法

这是我们平常用的: char s[100]; scanf("%s",s);//cin>>s; 输入字符串时,当遇到空格就自动停止输入,导致空格后门的字符没有按我们设想的输入. 现在有两种方法可以输入带空格的字符串: 第一,用get()函数: char str[100]; get(str); 注:get()函数在linux使用会有这条错误.在linux(fedora10)下的话建议使用第二种方法. test.o: In function `main': test.c:(.te

读写函数

1.getchar()/putchar() [原   型]int getchar (void);  /  intfputchar(char c); [返回值]读取/写入字符成功则函数返回值为该字符的ASIIC值,不成功则返回值为EOF. getchar() <==>getc(stdin);      putchar(char ch) <==>putc(char ch,stdout); 2.getc()/putc() 与fgetc()/fputc() [头文件]#include &l

c和c++的输入输出

格式输出:  printf(格式控制, 输出表列); %d 十进制数  %md m为指定的宽度 若数据位数小于m,则左端补以空格;若大于m,则按实际位数输出 %ld 长整型数据  %mld 指定字段宽度 %o 八进制整数形式  %mo %x 十六进制整数形式  %mx %u unsigned型数据,它也可用%o或%x格式输出 %c 一个字符   %mc %s 字符串 有几种使用方法 1.%s printf("%s", "China"); 输出 China 2.%ms

linux下使用gcc/g++编译代码时gets函数有错误

今天在linux中使用个g++编译一个名为myfirst.cpp的代码的时候,出现如下错误 myfirst.cpp: In function ‘int main()’:myfirst.cpp:11:2: warning: ‘char* gets(char*)’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] gets(cc); ^myfirst.cpp:11:9: warning: