2012-04-27 5 views
-2

Я хочу изменить одно значение файла, но следующий код не работает вообще. Он работает правильно, когда я удаляю оператор if.
код следующим образом:Fputc не работает, если еще

#include <stdio.h> 

int main() 
{ 
    int b; 
    FILE *fp; 

    fp=fopen("new", "r+"); 
    fseek(fp, 0x30, 0); 

    b = fgetc(fp); 
    if(b == 0x63) 
     fputc(0x64, fp); 

    fclose(fp); 
    return 0; 
} 

файл "новый": c111111111c1111111111111111111111111111111111111c1111111111111111111

Есть некоторые детали, которые я не знаю

+2

Каков ожидаемый результат? – thumbmunkeys

ответ

2

Вы написали один мимоb, если она есть? 0x63, потому что fgetc продвигает поток файлов:

b = fgetc(fp); 
if(b == 0x63) { 
    fseek(fp, -1, SEEK_CUR); 
    fputc(0x64, fp); 
} 
+0

Вы хороши, это работает. Но почему персонаж рядом с [b] не был изменен, когда я не искал назад? он должен был быть изменен, не так ли? –

0

Я думаю, что одна из ваших проблем: fp = fopen («new», «r +»); «r +» - читать и добавлять. Если вы пытаетесь перезаписать данные, это не сработает. Кроме того, fgetc продвигает поток файлов, как указано ранее.

+1

Фактически «r +» подходит для перезаписи данных, другие, такие как «w» или «w +», очищают текущий файл. –

+0

Это интересно, это не сработало для меня, когда я пытался. Я специально попытался перезаписать данные, которые у меня были в файле. Это только позволило бы мне добавить. – Ci3

Смежные вопросы