gpt4 book ai didi

c - fgets 函数在末尾打印垃圾

转载 作者:行者123 更新时间:2023-11-30 18:48:32 25 4
gpt4 key购买 nike

我编写了一个程序,可以创建一个由用户指定名称的文件。

#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

相同的程序,但仅使用 gets 函数给出了正确的文件名,但我听说不应使用 gets。

最佳答案

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);
}

您可以在以下位置查看有关 strcspn 的更多信息:- https://www.tutorialspoint.com/c_standard_library/c_function_strcspn.htm

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

关于c - fgets 函数在末尾打印垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45528533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com