在下面的代码中,我正在搜索'。'在我的模板后面粘贴一个字符串。出于某种原因,虽然字符串按预期粘贴,但会从我的模板中删除一些文本。我不知道问题出在哪里。试过fflush()没有什么好效果。
在C中的文件读写模式“r +”意外行为
#include <stdio.h>
#include <string.h>
int main() {
FILE * fp;
int tmp_char, tmp_offset;
char file_name[50] = "FileIoTest_template.txt";
char tmp_string1[50] = "Generic String 1";
char tmp_string2[50] = "Generic String 2";
long tmp_long;
fp = fopen(file_name, "r+");
//fseek(fp, 0, SEEK_SET);
do {
tmp_char = fgetc(fp);
printf("%c ", tmp_char);
if (tmp_char == '.')
break;
} while (tmp_char != EOF);
tmp_long = ftell(fp);
fseek(fp, tmp_long, SEEK_SET);
tmp_offset = strlen(tmp_string1);
fputs(tmp_string1, fp);
fputs("\n", fp);
//fflush(fp);
fseek(fp, tmp_long+tmp_offset, SEEK_SET);
do {
tmp_char = fgetc(fp);
printf("%c ", tmp_char);
if (tmp_char == '.')
break;
} while (tmp_char != EOF);
tmp_long = ftell(fp);
fseek(fp, tmp_long, SEEK_SET);
fputs(tmp_string2, fp);
fputs("\n", fp);
//fflush(fp);
fclose(fp);
return 0;
}
这里是我的模板 “FileIoTest_template.txt”:
Sample list:
1.
2.
3.
random text
4.
5.
6.
bunch of random text
我的代码的输出是:
Sample list:
1.Generic String 1
ext
4.Generic String 2
of random text
这就好像你认为'fputs' _inserts_内容到一个文件中。它不;它只是覆盖当前存在的任何东西(在当前位置)。 – davmac
它不会“删除”,它只是用新的覆盖你现有的数据。如果你想插入,你需要自己做。 – Matt
Ii可能会覆盖数据。当你使用'r +'模式时,它不会删除任何已经存在的数据。所以看看你是否正确定位光标。 – ameyCU