C fopen在现有文件上使用附加(故障)

C fopen在现有文件上使用附加(故障),c,append,fopen,C,Append,Fopen,大家好,我对编程比较陌生。目前我的代码工作正常 我要做的是打开一个文件进行追加,然后使用两个不同的源文件将数据放在目标文件上进行追加 问题是,每当我在文件名上使用fopen时,它不会打开现有文件,而是创建一个没有扩展名的文件。所有文件都在同一个目录中,因此应该能够打开,没有问题。这是我用来获取必要信息的代码,因为它只是创建了一个新文件,所以永远不会生成要追加错误的文件 FILE *fp_target; char target[100]; fgets(target, 99, stdin);

大家好,我对编程比较陌生。目前我的代码工作正常

我要做的是打开一个文件进行追加,然后使用两个不同的源文件将数据放在目标文件上进行追加

问题是,每当我在文件名上使用fopen时,它不会打开现有文件,而是创建一个没有扩展名的文件。所有文件都在同一个目录中,因此应该能够打开,没有问题。这是我用来获取必要信息的代码,因为它只是创建了一个新文件,所以永远不会生成要追加错误的文件

FILE *fp_target;

char target[100];

fgets(target, 99, stdin);

if ((fp_target = fopen(target, "a"))==NULL)
{
    fprintf(stderr, "the following target file %s can not be appended", target);
    exit (0);
}
实际上,我试过几次这个测试,当我用第一次尝试中使用的相同名称再次这样做时,让我们假设我使用了test.c,程序将打开test.cno扩展名,而不是test扩展名.c文件

有人能告诉我我做错了什么吗


此外,当我打开一个文件进行读取时,它将读取扩展名为

的文件,尝试从输入中删除换行符。利用

target[strlen(target)-1]='\0';
strlen用于查找string.h头文件中可用的字符串长度

strlentarget-1,用于查找换行符位置\0粘贴空字符以删除新行

如果使用该新行,则文件将创建为test.c

在磁盘中,我们无法创建具有已存在名称的文件。因此,换行符作为一个字符,文件名作为现有名称创建。

问题在于fgetstarget,99,stdin;线在输入'test.c'之后,它会接受一些垃圾值,直到数组结束。所以每次它创建一个新文件时。FGET的安装使用scanf从用户处获取输入

scanf("%s",target);
if ((fp_target = fopen(target, "a"))==NULL)
{
   fprintf(stderr, "the following target file %s can not be appended", target);
   exit (0);
}
如果要使用FGET从用户读取输入,请在用户输入后将其设置为NULL


您是否尝试打印出目标的值?也许问题是由于99个字符的限制,您的输入被截断了?我建议使用getdelim或getline而不是fgets,因为这是一个更安全的函数:非常感谢!在发布之前,我已经花了半个小时研究这个问题。但在发布之后,我得出了相同的结论!再次感谢!
fgets(target, 99, stdin);
target[strlen(target)-1]='\0';