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.
Réponses
Trop de publicités?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;
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.