Вы сохраняете результат fgetc
в символе вместо целого.
char w = '0'; /* Wrong, should be int. */
Кстати, эта проблема упоминается в C FAQ .
Если тип char
равен unsigned
, фактическое значение EOF будет усечено (при отбрасывании его битов более высокого порядка, что, вероятно, приведет к 255 или 0xff) и не будетраспознается как EOF, , что приводит к фактически бесконечному вводу .
РЕДАКТИРОВАТЬ
Повторное чтение вашего вопроса, это очень подозрительно, как вы ищетевернуться два символа и написать один символ.Это может привести к бесконечному циклу.
EDIT2
Вы (вероятно) хотите что-то вроде этого (не проверено):
while ((w = getc(fp)) != EOF) {
fseek(fp, -1, SEEK_CUR);
fprintf(fp, "0");
fflush(fp); /* Apparently necessary, see the answer of David Grayson. */
}