Collègue supérieur vous dit d'allouer de la mémoire dynamique, mais depuis sa plus sujette aux erreurs, plus difficile de travailler avec (besoin de libre mémoire) puis avec tableaux automatiques + vous connaissez la taille dans la compilation, il n'y a aucune raison d'utiliser l'allocation dynamique. Je vous recommande d'utiliser un tableau automatique à la place. N'oubliez pas non plus un octet pour le caractère de terminaison nulle.
char buf[4];
Nous utilisons l'allocation dynamique juste s'il n'y a pas d'autre moyen. Même si vous ne connaissez pas la taille du tableau au moment de la compilation, puisque c99 vous pouvez utiliser VLA.
compilateur également peut ajouter un rembourrage entre/derrière des éléments de struct. Rembourrage aligns structure des membres aux frontières d'adresses "naturelles".
Dans votre cas, il probablement ressembler à ce
struct gvk{
char a ; // 1B
char b ; // 1B
char c ; // 1B
// 1B padding
};
Ce qui signifie que dans ce cas, il devrait bien fonctionner, de toute façon, vous devriez éviter d'utiliser memcpy(buf, &k , 3*sizeof(char));
sur des structures comme celle-ci, parce que vous pouvez copier le remplissage au lieu de véritable élément de structure.
De plus il n'y a pas besoin de taper explicitement sizeof(char)
qui, par la norme, a une taille 1 (B).
'char buf [4];' ... 'sprintf (buf,"% c% c% c ", ka, kb, kc);' – BLUEPIXY
Vous devez allouer de la mémoire pour le 'buf' et également terminer avec un '\ 0' si vous voulez utiliser'% s' pour imprimer. De plus, ce n'est pas une bonne idée de supposer que 'sizeof (gvk)' est de 3 octets. –
En savoir plus sur [comportement indéfini] (https://en.wikipedia.org/wiki/Undefined_behavior) et de travailler dur pour l'éviter. Compilez avec toutes les informations d'avertissement et de débogage ('gcc -Wall -Wextra -g' avec [GCC] (http://gcc.gnu.org/) ...). Apprendre à utiliser le débogueur ('gdb') et [valgrind] (http://valgrind.org/) –