使用get获取C语言中的文件名时,文件会打开,但是使用fgets不会打开文件

jam*_*s02 2 c fopen file

我正在尝试用C语言从用户输入中获取字符串,以便程序可以打开选定的文件。
我尝试使用fgets是因为我在许多线程上读到它是更安全的选择(而不是gets)。
但是,当使用gets存储字符串时,文件将打开,而使用fgets则不会。

这是我正在使用的代码:

char csvFile[256];
FILE *inpfile;

printf("Please enter CSV filename: ");
fgets(csvFile,256,stdin);

printf("\nFile is %s\n",csvFile);

inpfile = fopen(csvFile,"r");

if(inpfile == NULL)
{
    printf("File cannot be opened!");
}
Run Code Online (Sandbox Code Playgroud)

我知道该文件存在,但是使用fgets输入了if块。
唯一的区别是使用:

gets(csvFile);
Run Code Online (Sandbox Code Playgroud)

代替

fgets(csvFile,256,stdin);
Run Code Online (Sandbox Code Playgroud)

谁能帮我理解这一点?提前致谢。

Dav*_*eri 5

您需要删除结尾的换行符:

char csvFile[256], *p;

fgets(csvFile, sizeof csvFile, stdin);
if ((p = strchr(csvFile, '\n')) != NULL) { 
    *p = '\0'; /* remove newline */
}
Run Code Online (Sandbox Code Playgroud)