Lire un fichier binaire, l'enregistrer dans la mémoire tampon, imprimer le contenu de la mémoire tampon

J'ai un gros problème qui doivent être résolus avant que je puisse continuer mon programme.

- Je ouvrir un fichier binaire, lire son contenu, enregistrer le contenu dans une mémoire tampon, allouer de l'espace sur le segment de mémoire avec malloc, fermez le fichier et enfin printf( le contenu de l' .fichier bin). Je suis venu de loin (de la fermeture du fichier n'est pas encore implémenté):

void executeFile(char *path){
FILE *fp; /*filepointer*/
size_t size; /*filesize*/
unsigned int buffer []; /*buffer*/
fp = fopen(path,"rb"); /*open file*/
fseek(fp, 0, SEEK_END); 
size = ftell(fp);         /*calc the size needed*/
fseek(fp, 0, SEEK_SET); 
buffer = malloc(size);  /*allocalte space on heap*/
if (fp == NULL){ /*ERROR detection if file == empty*/
printf("Error: There was an Error reading the file %s \n", path);           
exit(1);
}
else if (fread(&buffer, sizeof(unsigned int), size, fp) != size){ /* if count of read bytes != calculated size of .bin file -> ERROR*/
printf("Error: There was an Error reading the file %s - %d\n", path, r);
exit(1);
}else{int i;
for(i=0; i<size;i++){       
printf("%x", buffer[i]);
}
}
}

Je pense que j'ai foiré le tampon et je ne suis pas vraiment sûr si j'ai lu la .bin fichier correctement car je ne peux pas l'imprimer avec printf("%x", buffer[i])

Espère que vous les gars peuvent aider

Salutations de l'allemagne 🙂

Où est size être ensemble? Vous l'avez commenté.
Juste pour le cas où les choses ne fonctionnent pas parfaitement (comme, à droite par exemple), vous pouvez envisager de la vérification de la valeur de retour des fonctions que vous appelez. fopen(), malloc(), fseek().. Aucun sont en cours de vérification, si vous ne vérifier éventuellement pour fp == NULL, mais seulement après que vous aveuglément fseek() sur elle, et le NUL de vérifier semble être un fichier vide vérifier (ce qui n'est pas correct non plus) plutôt que de faillir à ouvrir. Lire la documentation de la bibliothèque.
Commenté size par accident->fixe
J'ai commencé à écrire une réponse détaillée, mais juste ce faire: (1) Vérifier les valeurs de retour, (2) le Changement de tampon type de base à unsigned char *buffer;. (3) Fixer fread() appel à passer buffer en tant que premier paramètre (pas &buffer), et sizeof(buffer[0]) que la seconde. et enfin (4) fermez votre fichier avec fclose() gratuit et votre tampon avec free(). Option de vérification pour size == 0 avant d'entrer dans la lecture et l'impression que je vous laisse.
Notez également que fstat() pourrait être une meilleure façon de déterminer la taille du fichier que plusieurs fseek() appels...

OriginalL'auteur user2418126 | 2013-05-24