Je suis assez nouveau à C alors s'il vous plaît supporter mon incompétence. Je veux lire un fichier entier Executable dans un tampon:C allocation de mémoire tampon
#include <stdlib.h>
FILE *file = fopen(argv[1], "rb");
long lSize;
fseek(file, 0, SEEK_END);
lSize = ftell(file);
fseek(file, 0, SEEK_SET);
char *buffer = (char*) malloc(sizeof(char)*lSize);
fread(buffer, 1, lSize, file);
Le fichier a 6144 octets (stockés correctement dans lSize), mais la taille de mon mémoire tampon est seulement 4 octets, donc que la signature MZ est stocké dans le tampon.
Pourquoi malloc n'attribue-t-il que 4 octets dans ce cas?
Édition: Probablement le tampon char est terminé par le premier 0 dans l'en-tête MZ du fichier PE. Si je mets le tampon à une certaine valeur cependant, le fichier entier sera stocké. Si je mets le tampon à int (= 4 octets), le buffer ne sera pas terminé mais sera bien sûr plus grand (vs char = 1 byte). Je veux juste copier l'octet de fichier pour byte avec les octets nuls aussi bien.
Edit 2: Le tampon contient bien sûr tout ce qu'il faut, mais si je tente de l'écrire dans un nouveau fichier avec fwrite, il n'écrit au premier \ 0 (ce qui est de 4 octets). Je viens de me tromper. Correction de ceci Désolé, le problème n'était pas assez bien défini.
Pourquoi pensez-vous que malloca alloue 4 octets seulement? –
Comment savez-vous qu'il alloue seulement 4 octets (il ne devrait pas, et je ne vois pas d'erreur dans votre code). Comment déterminez-vous que seulement 4 octets ont été lus/stockés? – Mat
Vous n'avez pas besoin d'utiliser sizeof pour connaître la taille du caractère. sizeof (char) est toujours 1. En C, "char" et "byte" sont synonymes. – tiftik