C 警告:“gets';功能是危险的,不应使用

C 警告:“gets';功能是危险的,不应使用,c,fgets,c-strings,gets,C,Fgets,C Strings,Gets,嗨,当我在终端上写make时,我收到了这个消息。gets有什么问题?我必须换些东西吗。谢谢你的帮助 user@ubuntu:~/Desktop/Project$ make gcc -g -ansi -pedantic -Wall -lm project.o -o project project.o: In function `main': project.c:(.text+0x2c8c): warning: the `gets' function is dangerous and should

嗨,当我在终端上写make时,我收到了这个消息。gets有什么问题?我必须换些东西吗。谢谢你的帮助

user@ubuntu:~/Desktop/Project$ make
gcc -g -ansi -pedantic -Wall -lm project.o -o project 
project.o: In function `main':
project.c:(.text+0x2c8c): warning: the `gets' function is dangerous and should not be used.

gets函数不安全,C标准不支持它。所使用的数组可以被覆盖到超出其大小。而是使用函数fgets。而不是这句话

gets(File_Name);
写得至少像

fgets( File_Name, sizeof( File_Name ), stdin );
函数可以将新行字符“\n”附加到输入的字符串中。要删除它,请使用以下代码

#include <string.h>

//...

fgets( File_Name, sizeof( File_Name ), stdin );

File_Name[ strcspn( File_Name, "\n" ) ] = '\0';
相当于

char File_Name[55] = "";


检查gets有什么问题?这是危险的,不应该使用。这条消息告诉你。这是OP存在的问题的解决方法,但它没有回答问题:“gets有什么问题?”谢谢你的帮助Vlad!请注意,
fgets()
方法要求数组大小大一点,以处理54个字符的文件名,而不在
stdin
中保留
'\n'
char File_Name[55] = { "\0" };
char File_Name[55] = "";
char File_Name[55] = { '\0' };