В следующем коде я ищу '.' в моем шаблоне для вставки строки после нее. По какой-то причине, хотя строка вставляется как ожидалось, она удаляет текст из моего шаблона. У меня нет идеи, где проблема может быть. Пробовал fflush() без хорошего эффекта.
Режим чтения файла «r +» неожиданное поведение в C
#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