2012-01-15 10 views
7

Nueva a los archivos en C, tratando de leer un archivo a través de freadfunción fread no poner fin a la cadena de 0

Aquí está el contenido del archivo:

line1 how 

código utilizado:

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

Al generar var 'c', el contenido aparece con un carácter aleatorio al final (por ejemplo: línea 1 *)

Hace f leer no terminar la cadena o me estoy perdiendo algo?

+1

'fread' solo lee bytes en búferes. no sabe nada de lo que llamas cadena. –

Respuesta

10

No. La función fread simplemente lee una serie de elementos, no tiene noción de "cuerdas".

  • Puedes añadir el terminador NUL mismo
  • Puede utilizar fgets/fscanf lugar

Personalmente me gustaría ir con fgets.

+0

para los interesados, se proporciona una implementación de ejemplo para eliminar la nueva línea de fgets aquí: http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input –

2

El man page for fread dice nada acerca de la adición de un cero de terminación al final del archivo.

Si quiere estar seguro, inicialice todos los bytes en su matriz c para que sean cero (a través de bzero o algo así) y cuando lo lea, tendrá un nulo de terminación.

He vinculado las dos páginas del manual para fread y bzero y espero que eso lo ayude.

1

Lamento llegar un poco tarde a la fiesta.

No, fread no maneja esto para usted. Debe hacerse manualmente. Afortunadamente no es difícil. me gustaría usar fread() 's retorno para establecer el NUL de este modo:

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

y ahora tiene a sí mismo una cadena terminada \ 0, y como un bono, tenemos una variable x ingenioso, que en realidad nos ahorra el problema de ejecutar strlen() si alguna vez lo necesitamos más tarde. ¡ordenado!

Cuestiones relacionadas