bisogno di fseek () in c

Parte del codice 1: –

while(1) { ch=fgetc(pt); if(c==EOF) { break; } if(c==' ') { fputc('z',pt); } } 

Parte del codice 2: –

 while(1) { ch=fgetc(pt); if(c==EOF) { break; } if(c==' ') { fseek(pt,0,SEEK_CUR); fputc('z',pt); fseek(pt,0,SEEK_CUR); } } 

Voglio sostituire il prossimo carattere dopo ogni space in un file. Quel file è puntato dal puntatore pt .

Il codice non mostra alcun errore e funziona bene, ma quando apro esternamente il file .txt , il primo codice non ha fatto nulla, mentre il secondo codice sostituisce il prossimo carattere dopo lo space .

Chiaramente fseek(pt,0,SEEK_CUR); sta facendo la differenza

Quindi non riesco a capire che cosa sta facendo nel secondo codice?

L’uso di fseek() qui – Lo standard C richiede un’operazione di posizionamento tra un’operazione di lettura e di scrittura su un stream di aggiornamento o tra una scrittura e una lettura. Questa è un’operazione di posizionamento tra una scrittura e una lettura. Non è un no-op; mette lo stream in una modalità che consente al prossimo fgetc() di funzionare correttamente, in modo affidabile, attraverso le piattaforms, come richiesto dallo standard C.

MODIFICARE:

Sono richieste 2 chiamate fseek() perché la prima funge da chiamata “no-op” tra una chiamata fgetc() e una successiva chiamata fputc() . Dopo il fputc() , il secondo funge da “no-op” tra fputc() e la successiva chiamata fgetc() . (poiché un ciclo è in esecuzione)