Recopie bit à bit

Recopie bit à bit - C - Programmation

Marsh Posté le 11-05-2007 à 14:26:32    

Bonjour...
Ca fait un petit bout de temps que je me casse les dents sur ce probleme : je souhaite recopier le contenu de tmp dans une zone mémoire vide que je viens de mapper... mais GCC dit  

Code :
  1. TEST.c:100: error: subscripted value is neither array nor pointer


La structure :  

Code :
  1. struct EnTete_s {
  2.   int taille_zone; //Taille de la zone reservee en memoire
  3.   int nb_reallocation; //Nombre de re-allocation(s) de la zone reservee en memoire
  4.   int nb_liberation; //Nombre de liberation de la zone reservee en memoire
  5.   char* allocation_initiale; //Fonction a l'origine de l'allocation initiale
  6. };


Le code :  

Code :
  1. void* EnTete_Ecrire (void* pointeur, int taille_zone, int nb_reallocation, int nb_liberation, char* allocation_initiale) {
  2.   int i;
  3.   struct EnTete_s tmp;
  4.   if (taille_zone == 0 || nb_reallocation < 0 || nb_liberation < 0 || pointeur == NULL) return NULL;
  5.   tmp.taille_zone = taille_zone;
  6.   tmp.nb_reallocation = nb_reallocation;
  7.   tmp.nb_liberation = nb_liberation;
  8.   tmp.allocation_initiale  = allocation_initiale;
  9.   for (i = 0; i < sizeof (struct EnTete_s); i++)
  10.     pointeur = tmp[i]; //ERREUR !!!
  11. }

Reply

Marsh Posté le 11-05-2007 à 14:26:32   

Reply

Marsh Posté le 11-05-2007 à 14:28:56    

tmp n'est ni un tableau ni un pointeur ...
memcpy

Reply

Marsh Posté le 11-05-2007 à 14:31:57    

En lisant le man de memcpy je recopie directement n octets d'une source vers une destination si je comprends bien le man...
Donc dans mon cas ce serait :  
 

Code :
  1. memcpy (pointeur, &tmp, sizeof(struct EnTete_s))

Reply

Marsh Posté le 11-05-2007 à 14:43:29    

sizeof tmp tout simplement

Reply

Marsh Posté le 11-05-2007 à 15:52:01    

MERCI pour ton aide... mais vu que tu a l'air meilleur que moi... voila un second probleme dans le meme genre :  
 
la réponse de mon gcc :  

Code :
  1. TEST.c:120: attention : implicit declaration of function `EnTete_lire'


mon code :  

Code :
  1. struct EnTete_s EnTete_Lire (void* tmp_pointeur) {
  2.   struct EnTete_s tmp_EnTete;
  3.   memcpy (&tmp_EnTete, tmp_pointeur, sizeof(struct EnTete_s));
  4.   return tmp_EnTete;
  5. }


l'appel de ma fonction :  

Code :
  1. struct EnTete_s tmp_EnTete;
  2. [...]
  3.   EnTete_Ecrire (20, 0, 0, "m" );
  4.   tmp_EnTete = EnTete_lire (map_debut); //ERREUR


Reply

Marsh Posté le 11-05-2007 à 15:54:10    

Je n'ai rien dit... il s'agissait juste d'un probleme de case sur le nom de ma fonction

Reply

Marsh Posté le 11-05-2007 à 16:23:19    

Passe plutot Entete_s par pointeur en argument, ça sera plus efficace.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed