bonjour ,
je fait une fonction qui possède un paramètre (générique) de type :
je veux dire par générique car ce paramètre elle prend n'importe quel type comme le void * mais de moi je préfere le char * car pour le char je vais manipuler les octets , je montre le code pour comprendre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part char *
voyez ici la fonction test elle possède un paramètre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 typedef struct { unsigned int IP_MULTICAST; unsigned int IP_LOCAL; }IP_MREQTypeDef; void test(const char * buff, int length) { char s[100]; memcpy(s,buff,length); printf("%s",s); printf("%d",strlen(s)); } int main() { int i,j; IP_MREQTypeDef x; x.IP_MULTICAST=49; x.IP_LOCAL=50; test((char*)&x,sizeof(IP_MREQTypeDef)); return 1; }c'est le paramètre générique . lors de l'appelle de cette fonction j'ai passé à ce paramètre une structure avec la cast bien sure . maintenant dans la fonction test je veux copier les 2 attributs de cette structure dans une chaîne de caractère juste je parle des octets donc copier les 4 octets de première attribut vers les 4 premiers octets de s et puis la deuxième , le problème ici lorsque j'exécute ce programme il m'affiche que 1 car le code ascii 49 avec un taille de s est 1 il a pas récupéré la deuxième valeur , je sais le problème c'est quoi car ici le première attribut sur 4 octet avec la valeur de 49 occupe un seul octet donc le reste des octets sont à NUL dans ce cas la je pense que la fonction memcpy lorsque elle trouve un NUL elle sarrette et l'autre attribut ne sera copié. j'ai posté ici pour me trouvé une solution pour ça ou bien une autre méthode . bon j'ai dit ce paramètre générique car je peux par exemple passer un int non un struct
Code : Sélectionner tout - Visualiser dans une fenêtre à part const char *
et merci pour l'aide .
Partager