Файл открыт как для записи, так и для чтения, но вам нужно fseek
в правильное место в файле (здесь, в начале).В частности, при переключении между записью и чтением необходимо fseek
или fflush
.
Когда указан тип доступа "r +", "w +" или "a +", оба вида чтенияи запись включены (говорят, что файл открыт для «обновления»).Однако, когда вы переключаетесь с чтения на запись, операция ввода должна встретиться с маркером EOF.Если EOF отсутствует, вы должны использовать промежуточный вызов функции позиционирования файла.Функции позиционирования файла: fsetpos, fseek и rewind. Когда вы переключаетесь с записи на чтение, вы должны использовать промежуточный вызов либо для fflush, либо для функции позиционирования файла .
В любом случае после записи в файлуказатель файла находится не в том месте, чтобы прочитать только что написанное.
Таким образом, код становится
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *file = NULL;
file = fopen("test.txt", "w+");
if(file != NULL) {
fputs("ab", file);
fseek(file, 0, SEEK_SET);
printf("%c", fgetc(file));
fclose(file);
}
else {
printf("error");
}
return 0;
}
И если вы хотите продолжить запись в файл, вы должны fseek
, чтобыего конец.