2016-11-25 1 views
0

J'essaie de lire 256 octets dans un tampon à partir d'un fichier de 65536 octets, en le traitant comme un fichier à accès aléatoire en utilisant fopen, fread, fwrite et fseek. Je ne reçois aucune erreur, mais le tampon est toujours vide après la lecture, même si le fichier n'est pas vide et que fread signale la lecture de 256 octets. Voici mon code:fread into buffer est vide malgré le fichier non vide

FILE *file = NULL; 
    char buffer[255]; 
    memset(buffer, 0, sizeof(buffer)); 

    file = fopen("BACKING_STORE.bin","r"); 

    if(file == NULL) { 
      printf("Error: can't open file.\n"); 
      return NULL; 
    } // end if 

    if(fread(buffer, 1, 256, file) != 256) { 
      printf("Error: reading from file failed.\n"); 
      return NULL; 
    } // end if 

    printf("The bytes read are [%s]\n", buffer); 

    fclose(file); 

Et pour confirmer, j'ai ouvert le fichier BACKING_STORE.bin dans un éditeur hexadécimal juste pour vous assurer que ce n'était pas vide. Voici une capture d'écran de cela: enter image description here

Après l'exécution de ce programme, j'obtiens la sortie: "Les octets lus sont []" mais sans aucune erreur. Je suis assez nouveau à C, donc je suis sûr que c'est juste quelque chose de simple qui me manque.

Merci pour l'aide. :)

+2

comportement non défini: Votre mémoire tampon est de 255 octets, mais vous avez bien lu 256. – Olaf

Répondre

2

Parce que vous ne pouvez pas générer des données binaires avec "%s" et printf(). Si vous voulez voir le contenu que vous pouvez écrire une boucle et d'imprimer la valeur hexadécimale de chaque octet, comme celui-ci

for (size_t i = 0 ; i < 256 ; ++i) { 
    fprintf(stdout, "0x%02x ", buffer[i]); 
    if ((i + 1) % 8 == 0) { 
     fputc('\n', stdout); 
    } 
}