2012-01-15 9 views
7

Nuovo per i file in C, cercando di leggere un file tramite freadfunzione fread non chiude stringa 0

Ecco il contenuto del file:

line1 how 

codice utilizzato:

char c[6]; 
fread(c,1,5,f1) 

Quando si emette var 'c', i contenuti vengono visualizzati con un personaggio a caso alla fine (ad esempio: linea 1 *)

fa f leggere non terminare la stringa o mi manca qualcosa?

+1

'fread' legge solo byte nei buffer. non sa nulla di ciò che chiamate una stringa. –

risposta

10

No. La funzione fread legge semplicemente un numero di elementi, non ha nozione di "stringhe".

  • È possibile aggiungere il terminatore NUL da soli
  • È possibile utilizzare fgets/fscanf invece

Personalmente vorrei andare con fgets.

+0

per gli interessati, un esempio di implementazione per rimuovere newline da fgets è disponibile qui: http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input –

2

Il man page for fread non dice nulla sull'aggiunta di uno zero terminante alla fine del file.

Se si desidera essere sicuri, inizializzare tutti i byte nel proprio array c in modo che siano pari a zero (tramite bzero o qualcosa di simile) e quando si legge, si avrà un annullamento terminato.

Ho collegato le due pagine man per fread e bzero e spero che ti aiuti.

1

Scusa, sono un po 'in ritardo per la festa.

No, questo non lo gestisce per voi. Deve essere fatto manualmente. Fortunatamente non è difficile. Mi piace usare fread() 's ritorno per impostare il NUL in questo modo:

char buffer[16+1]; /*leaving room for '\0' */ 
x = fread(buffer, sizeof(char), 16, stream); 
buffer[x]='\0'; 

e ora avete voi stessi una stringa che termina \ 0, e come bonus, abbiamo una variabile x ingegnoso, che in realtà ci risparmia il problema di eseguire strlen() se mai ne abbiamo avuto bisogno in seguito. pulito!

Problemi correlati