我制作了一个程序,用于创建一个名称由用户提供的文件。
#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
相同的程序,但只是使用获取函数提供正确的文件名,但我听说不应该使用获取。
答案 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