fopen使用追加EXISTING文件(故障)

时间:2014-08-07 05:30:20

标签: c append fopen

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

我想要做的是打开一个文件进行追加,然后使用几个不同的其他源文件将数据放到目标文件上进行追加。

问题在于,每当我在文件名上使用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.c(没有扩展名而不是文件"测试扩展名(.c)")

任何人都可以让我知道我做错了什么吗?

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

的文件

2 个答案:

答案 0 :(得分:0)

尝试从输入中删除换行符。使用

target[strlen(target)-1]='\0';

strlen()用于查找string.h头文件中可用字符串的长度。

strlen(target)-1用于查找换行符位置\0粘贴空字符,以便删除新行。

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

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

答案 1 :(得分:0)

问题在于您的fgets(target, 99, stdin);行。在输入' test.c'它需要一些垃圾值,直到数组结束。所以每次创建一个新文件。 Instateed fgets使用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);
}

如果您想使用fgets来阅读用户的输入,请在用户输入后将其设为NULL

fgets(target, 99, stdin);
target[strlen(target)-1]='\0';