¿Por qué es fwrite & fread printing basura?

Cuando se ejecuta el siguiente código, ¿por qué hay basura adicional impresa junto con la cadena HALLO?

#include  #include  int main(void) { FILE *binfile; binfile = fopen("binary.bin", "wb+"); char arr[5] = "HALLO"; int integer = 1; double doub = 1.2345; fwrite(arr, sizeof(arr), 1, binfile); fwrite(&integer, sizeof(int), 1, binfile); fwrite(&doub, sizeof(double), 1, binfile); fclose(binfile); binfile = fopen("binary.bin", "r"); char arr2[5]; int integer2; double doub2; fread(arr2, sizeof(arr2), 1, binfile); fread(&integer2, sizeof(int), 1, binfile); fread(&doub2, sizeof(double), 1, binfile); printf("%s\n", arr2); printf("%d\n", integer2); printf("%lf\n", doub2); fclose(binfile); return EXIT_SUCCESS; } 

Si no ha permitido el terminador nulo en la cadena.

Ok, un poco más de detalle. No ha dejado en claro lo que está intentando hacer, así que supongamos que desea escribir bytes de 5 caracteres. El problema es que cuando vuelve a leer sus 5 caracteres, los vuelve a leer en una matriz de caracteres (fina) y luego intenta imprimir esa matriz sin terminador nulo, no está bien.

Así que, o bien, vuelve a leerlos en una nueva matriz y establece

 newarray[5]=0; 

o imprímelo de forma segura sabiendo que tiene 5 caracteres

 printf("%5.5s",array); 

(Algo así de todos modos)

printf (“% s \ n”, arr2) interpreta arr2 como un puntero a una cadena, no como una matriz de caracteres. Debido a que su matriz de caracteres no termina con un terminador cero, printf imprime alegremente lo que esté almacenado en las ubicaciones de memoria que siguen a la matriz de caracteres.

Este fragmento de código debería funcionar:

 char arr2[5+1]; fread(arr2, sizeof(arr2) - 1, 1, binfile); arr2[sizeof(arr2) - 1] = '\0'; printf("%s\n", arr2);