Comment puis-je malloc un tableau de n éléments dont chacun, je sais, est un tableau de deux caractères?

J'ai essayé quelque chose comme ça mais les compilateurs disent que c'est invalide:

char *candidates_top[2] = malloc(sizeof(char[2]) * n);
c
1
pistacchio 20 avril 2017 à 17:38

3 réponses

Meilleure réponse

Comme ça:

char (*candidates_top)[2] = malloc(sizeof(*candidates_top)*n);

Vous devez lire le type de la nouvelle variable candidates_top de l'intérieur: candidates_top est un pointeur (*...) vers un tableau de deux éléments [2] qui se trouvent être de type char. C'est comme si vous créiez un tableau de n entiers avec

int *intArray = malloc(sizeof(*intArray)*n);

À la seule différence que dans le cas de candidates_top les éléments du tableau sont eux-mêmes des tableaux.

L'indexation est exactement comme vous vous en doutez:

candidates_top[7][0] = '4';
candidates_top[7][1] = '2';
4
cmaster - reinstate monica 20 avril 2017 à 14:44

La déclaration

char *candidates_top[2];

Déclare candidates_top comme un tableau de deux pointeurs vers char. Vous semblez vouloir que candidates_top soit un pointeur vers un tableau de deux char que vous obtenez avec

char (*candidates_top)[2];
1
Some programmer dude 20 avril 2017 à 14:41

Si cela fait saigner vos oreilles:

char (*candidates_top)[2] = malloc(sizeof(*candidates_top)*n);

Vous pouvez le nettoyer avec un typedef:

typedef char twos[2];
//....
twos *candidates_top=malloc(sizeof(twos)*n);
0
Persixty 20 avril 2017 à 14:51