Si j'ai bien tout compris
Non, tu n'as pas compris....
Il y a une différence majeur entre l'occupation mémoire d'un pointeur et d'un tableau statique.
Un pointeur occupe la taille d'un pointeur seulement et la valeur est l'adresse mémoire où se trouve le tableau (même à un seul élément)...
Un tableau statique occupe la taille de l'élément de base du tableau * nombre d'éléments...
Donc logiquement:
1 2
|
memcpy( pstStruct, stVal, sizeof(stVal) ); |
Ne pourra jamais marché!!!
Si tu veux le faire comme ceci, tu pourrais faire ceci:
1 2 3 4 5 6 7 8 9 10
|
pstStruct->pstVal1 = malloc(sizeof(stVal));
if(pstStruct->pstVal1==NULL)
{
printf("Erreur d'allocation!!!\n");
//En principe faudrait retourner une valeur d'erreur mais ta fonction est void
}
memcpy( pstStruct->pstVal1, stVal, sizeof(stVal) ); |
De plus, il est mauvais usage de faire comme tu as fait puisque tu suppose beaucoup de choses, si ta structure était définie comme ceci:
1 2 3 4 5
| typedef struct
{
Strcut2 pstVal1[10]; // Tableau dont on ne connait pas la taille
Strcut2 stVal2;
} Struct3; |
Tu pourrais faire ceci:
memcpy( pstStruct->pstVal1, stVal, sizeof(stVal) );
Et si on suppose que le compilateur respecte l'ordre de la structure (et c'est là que je me tourne vers les spécialistes de la norme: Est-ce dans la norme que la disposition en mémoire suit la déclaration de la structure?) alors tu pourrais faire:
memcpy( pstStruct, stVal, sizeof(stVal) );
Mais je te le déconseille puisque le jour où tu ajoutes quelque chose dans ta structure, si tu le fais en premier élément, ce code ne sera plus correct...
Jc
Partager