Да: вы можете использовать функцию fseek
:
fseek(file_ptr, -1L, SEEK_CUR); // move backwards one character
Кроме того, после вашего fputc
и до вашего fgetc
вы захотите позвонить fseek
еще раз:
fseek(file_ptr, 0L, SEEK_CUR); // don't move
просто для уведомления системы о том, что вы переключаетесь между чтением и записью, чтобы она знала, как правильно очищать все буферы и еще много чего.(В противном случае вы, возможно, не окажетесь там, где вы думаете.)
Кстати, чтобы это работало правильно, вы захотите открыть файл в двоичном, а не текстовом режиме:
file_ptr = fopen("test.txt", "rb+");
, поскольку в противном случае определение «символа» внутри C может не совпадать с определением «символа» внутри файла (особенно когда речь идет об окончаниях строк), а fseek
может поставить вас в серединуодин из последних.