fgets函数最后打印垃圾

时间:2017-08-06 04:32:36

标签: c fgets

我制作了一个程序,用于创建一个名称由用户提供的文件。

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
int main()
{
       int g;
       char file[15];
       fgets(file,15,stdin);
       g=open(file,O_CREAT | O_WRONLY,__S_IWRITE);


}

但是它创建了一个文件,文件结尾有一些垃圾字符。我怎么能纠正这个?

这里是样本运行:

$ ./a.out
coolfile.txt
$ ls
a.out  coolfile.txt?  test.c

相同的程序,但只是使用获取函数提供正确的文件名,但我听说不应该使用获取。

2 个答案:

答案 0 :(得分:1)

fgets()将换行符存储在结果中每行的末尾。因此,您要创建名称以换行符结尾的文件。要修复它,只需检查最后一个字符,如果它是'\0',则将其设置为'\n'

答案 1 :(得分:1)

fgets\n存储在每行的末尾,因此您需要删除\n

点这个使用strcspn函数

因此你的代码看起来应该是这样的

 #include <stdlib.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <string.h>
 int main()
  {
    int g;
    char file[15];
    fgets(file,15,stdin);
    file[strcspn(file, "\n")] = 0;
    g=open(file,O_CREAT | O_WRONLY,__S_IWRITE);
  }

您可以在{ - 1}}上看到有关strcspn的更多信息: - https://www.tutorialspoint.com/c_standard_library/c_function_strcspn.htm

另请参阅: - Removing trailing newline character from fgets() input