fflush() работает не так, как ожидалось

В настоящее время я работаю над проектом, в котором мне нужен файл io. В этом проекте я часто читаю и пишу в файл. Но дело в том, что я не могу ничего прочитать из файла. Я пробовал использовать fflush(), но, похоже, это не работает. У меня есть пример кода, который демонстрирует такое же поведение, как показано ниже.

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    FILE* fp = fopen("file.txt", "w+");
    fprintf(fp, "Test text");
    fflush(fp);

    char c = fgetc(fp);
    fclose(fp);
    cout << c << endl;
    return 0;
 }

Вместо того, чтобы c быть «T», как и ожидалось, я получаю неизвестный символ.

Я использую ввод-вывод в стиле C, потому что хочу избежать накладных расходов fstreams.


person Joe    schedule 11.01.2020    source источник
comment
Кроме того, у Microsoft есть честно говоря о переключении между чтением и записью в разделе о параметре mode.   -  person Weather Vane    schedule 11.01.2020
comment
fgetc() возвращает int, а не char.   -  person Andrew Henle    schedule 11.01.2020


Ответы (1)


Похоже, что указатель на файл указывает на конец файла, поэтому возвращается -1, поэтому вы получаете странное char. После fflush(); (ведьма, я считаю, не нужна, по крайней мере, для примера, который вы создаете) вы можете указать указатель на начало файла со смещением 0:

//...
fflush(fp);
fseek(fp, 0, SEEK_SET);
char c = getc(fp);
//...

Это вернет 84, ведь это правильный код ASCII для символа T.

person anastaciu    schedule 11.01.2020