[C] structure dans un tableau de char

Résolu
Hadra38 Messages postés 109 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je suis en train de créer un driver pour un peripherique fictif.

le problème c'est que je dois a un moment passer une structure par un pointeur qui est un pointeur sur un tableau de char de même taille que la structure

Hors je n'arrive pas a faire cete manip ...

pouvez vous m'aider,

merci,

Hadra

7 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Tu ne cherche pas a faire simplement un cast ?
    #include <stdio.h>
    
    int main(){
      char *buf = "pouet";
      void *p = buf;
      char *plop = (char *) p;
      printf("%s\n",plop);
      return 0;
    }
    0
  2. Hadra38 Messages postés 109 Statut Membre 11
     
    j'essaie de faire ca mais j'ai des segmentation fault !
    0
  3. loupius
     
    Il ne suffit pas d'essayer de 'faire ça'; il faut y arriver... et si tu y arrives -> plus de 'segmentation fault'.
    Bon courage.
    0
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    un petit morceau de ton code pourrai nous permettre d'être plus précis. Si il y a une erreur de segmentation, c'est que tu as mal alloué de la mémoire quelque par.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    En fait un cast ne fait qu'interpréter différemment à une adresse ce qui s'y trouve. Typiquement un char * désigne l'adresse d'un caractère (ou d'un tableau de caractère, autrement dit d'une chaîne).

    Au moment ou tu évalues ce qui se trouve à une adresse 'p' (comme pointeur) en appelant '*p', il faut bien entendu que 'p' soit initialisé avec une adresse valide, sinon on a une erreur de segmentation. Souvent, 'p' est initialisé en prenant l'adresse mémoire d'un objet (par exemple si j'ai un float 'f', &f désigne l'adresse à laquelle est stocké le float).

    Je te rappelle qu'un horizon est, pour faire simple, une paire d'accolades (notamment d'une boucle ou d'une fonction) et que les variables déclarées dans un horizon sont désallouées à la sortie de cet horizon. Si tu as besoin d'allouer et de propager une zone mémoire en dehors de son horizon, il faut utiliser une fonction comme malloc (et la libérer avec un free). Si ce que je viens de te dire ne te parle pas je t'invite à lire un tutoriel sur le langage C.

    Bonne chance
    0
  7. Hadra38 Messages postés 109 Statut Membre 11
     
    merci mamiemando...

    en faite mon problème etait bien que lorsque j'utilisais "strcpy" la copie s'arreter au premier octet null en effet c'est le caractere de fin de chaine !

    et quand je faisais un (char *) X = (char *) Y; il prend que le premier octet (normal on cast en char !)

    il fallait simplement que je fasse ma copie mémoire grâce a memcpy(void* dest, void* src, int tailleCpy)

    donc j'ai simplement fait

    char buff[TAILLE];
    My_Struct donnesPourCast = ....... ;

    memcpy((void*)buff, (void*) &donnesPourCast , sizeof(My_Struct));

    et le tour est joué ^^

    merci a tous !
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Ah oui, piège classique :-)

    Bonne continuation !
    0