C tampon de l'allocation de la mémoire

Je suis assez nouveau à C donc excusez mon incompétence. Je veux lire un ensemble de fichier Exécutable dans une 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 6144 bytes (octets stockés correctement dans lSize), mais la taille de mon tampon est à seulement 4 octets, donc que le MZ signature est stockée dans la mémoire tampon.

Pourquoi ne malloc seulement allouer 4 octets dans ce cas?

Edit:
Probablement le char tampon est terminé par le premier 0 dans la MZ en-tête du fichier PE. Si j'ai mis de la mémoire tampon à une certaine valeur, cependant, l'ensemble du fichier sera stocké. Si j'ai mis le tampon de int (= 4 octets), le tampon ne sera pas licencié, mais sera bien sûr plus (vs char = 1 octet). Je veux juste copier le fichier octet par octet avec des octets nuls.

Edit 2:
Le tampon de cours contient tout ce qu'il faut mais si j'essaie d'écrire dans un nouveau fichier avec fwrite, il n'a écrit que jusqu'à la première \0 (qui est de 4 octets). Je viens de recevoir fwrite mal. Corrigé cela. Désolé, le problème n'était pas assez défini.

Pourquoi pensez-vous, que malloca alloue 4 octets seulement?
Comment savez-vous que c'est l'allocation de seulement 4 octets (il ne faut pas, et je ne vois aucune erreur dans votre code). Comment allez-vous déterminer que seulement 4 octets ont été lus/stockées?
Vous n'avez pas à utiliser sizeof à savoir la taille de char. sizeof(char) est toujours de 1. En C, "char" et "octet" sont synonymes.
sizeof(char) == 1 par définition. Si la mémoire ne contient 4 octets, c'est parce que lSize == 4.
Le code est correct. Est-il possible que vous regardez le contenu de la mémoire tampon dans le débogueur, comme une chaîne nul, et ne voir que 4 octets parce que le cinquième est un octet nul? Essayez d'analyser le contenu de la mémoire tampon dans une fenêtre de la mémoire avant et après l'appel fread.

OriginalL'auteur Laughingman | 2011-10-15

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *