0 votes

un problème avec les char** en c

Bonjour J'ai un char** arr qui est un tableau de chaînes de caractères et je veux effacer les 2 dernières cellules du tableau ou peut-être créer un nouveau char** mais sans ces 2 dernières cellules. merci beaucoup.

1voto

Connaissez-vous la taille de votre tableau ?

Le code pourrait être comme ceci en supposant que la longueur du tableau est array_size :

int array_size;
char **array = malloc (sizeof (char*) * array_size); 
....
free (*(array+array_size)); *(array+array_size) = NULL;
free (*(array+array_size-1)); *(array+array_size-1) = NULL;

Au cas où vous ne connaîtriez pas la longueur, le fait que l'élément précédant le dernier élément utilisé soit NULL vous aidera.

Ensuite, le code un peu plus complexe :

for (char** ai = array; *ai != NULL; ai++);
ai--;
free(*ai); *ai = NULL;
ai--;
free(*ai); *ai = NULL;

1voto

BeWarned Points 1314

Que diriez-vous de libérer la mémoire pointée par les deux derniers éléments du tableau, de les mettre à zéro et de garder séparément la trace de la taille du tableau.

Par exemple

unsigned int len = 10;
char **aryStr = (char**) malloc(sizeof(char *)*len);
....
free(aryStr[--len])
aryStr[len] = NULL;
free(aryStr[--len])
aryStr[len] = NULL;

Vous pouvez utiliser le nouveau len comme paramètre pour les routines de manipulation du tableau. Vous pouvez également créer une valeur supplémentaire (sentinelle) dans votre tableau qui marque la fin des données en pointant vers NULL. Vous traitez le tableau (comme une chaîne) en l'itérant jusqu'à ce que vous trouviez une valeur NULL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X