warning: the 'gets' function is dangerous and should not be used.的解决办法

本文探讨了Linux环境下使用gets函数可能导致的警告问题,并提供了将gets替换为fgets的解决方案。同时,解释了fgets与gets在读取输入时的不同行为,特别是关于换行符的处理差异,以及如何在Linux终端下处理不同换行符编码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Linux下,使用

gets(cmd)

函数报错:warning: the 'gets' function is dangerous and should not beused.

问题出在程序中使用了 gets  ,Linux 下gcc编译器不支持这个函数,解决办法是使用 fgets 

解决办法:采用

fgets(cmd,100,stdin);//100为size

问题解决!

 

fgets从stdin中读字符,直至读到换行符或文件结束,但一次最多读size个字符。读出的字符连同换行符存入缓冲区cmd中。返回指向cmd的指针。

gets把从stdin中输入的一行信息存入cmd中,然后将换行符置换成串结尾符NULL。用户要保证缓冲区的长度大于或等于最大的行长。

 


/*   代码实现     */

#include <stdio.h>
int main ( ) {

   char name[20];

   printf("\n 输入任意字符 : ");

   fgets(name, 20, stdin);//stdin 意思是键盘输入

   fputs(name, stdout); //stdout 输出

   return 0;
}

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

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


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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值