Le redimensionnement d'un tableau en C
Dire que j'ai affecté à un tableau comme ceci:
char* array[]={"This"};
Et puis plus tard, j'ai voulu attribuer tableau[ ] une nouvelle valeur, de sorte qu'il stocke "Ceci" et "Cela" est-il un moyen que je puisse changer la taille de la table de sorte qu'il pourrait tenir un nouveau numéro de valeurs?
Notez que vous avez déclaré un tableau à deux dimensions ici. Je ne suis pas sûr que c'était votre intention?
ce n'est pas un tableau en 2 dimensions (peut-être que la question a été changé après votre commentaire, mais avant de le modifier fenêtre fermée).
techniquement, vous avez raison. C'est un tableau de pointeurs sur des caractères, mais il est initialisé comme un tableau de pointeurs vers des chaînes de caractères (avec un seul élément.) Peut-être ce qu'il veut bien, c'est un peu difficile de la question.
Je pense que c'est ce qu'il veut (à l'exception du tableau de variables de ne pas faire ce qu'il veut). Il commence avec un tableau de pointeur (à
on dirait que vous avez raison 🙂
ce n'est pas un tableau en 2 dimensions (peut-être que la question a été changé après votre commentaire, mais avant de le modifier fenêtre fermée).
techniquement, vous avez raison. C'est un tableau de pointeurs sur des caractères, mais il est initialisé comme un tableau de pointeurs vers des chaînes de caractères (avec un seul élément.) Peut-être ce qu'il veut bien, c'est un peu difficile de la question.
Je pense que c'est ce qu'il veut (à l'exception du tableau de variables de ne pas faire ce qu'il veut). Il commence avec un tableau de pointeur (à
"This"
), plus tard, il veut un tableau de deux pointeurs (un à "This"
et un à "That"
).on dirait que vous avez raison 🙂
OriginalL'auteur Sam | 2012-10-16
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas modifier la taille d'un tableau. Vous pouvez utiliser un allouée dynamiquement la liste des
char*
au lieu etrealloc()
requis:Voir la démo en ligne: https://ideone.com/ng00k.
OriginalL'auteur hmjd
Il n'y a pas moyen de redimensionner un tableau. Vous pouvez simplement créer un nouveau tableau de taille 2, puis de copier toutes les données de la précédente à la nouvelle.
realloc
le fait pour vous avec la mémoire dynamique. La meilleure façon est d'utiliser des structures de données telles queLinkedLists
ouVectors
qui vous pouvez trouver plus au sujet de en ligne.OriginalL'auteur Ben
Vous ne pouvez pas redimensionner des objets d'ensemble.
Vous devez allouer dynamiquement de la mémoire pour
array
et de l'étendre à l'aide derealloc
. Exemple:Mises en garde:
realloc
est relativement cher appel, de sorte que vous (en général) ne veulent pas prolonger votre tampon un élément à la fois, comme je l'ai fait ici. Un plus stratégie la plus courante consiste à choisir un point de départ initial de taille qui couvre la plupart des cas, et si vous avez besoin d'étendre la mémoire tampon, le double de sa taille.Vous pourriez résumé de l'opération de redimensionnement dans une autre fonction, comme suit:
et l'appeler comme
C'est toutes testées et sur le dessus de ma tête; aucune garantie, expresse ou implicite. Mais il devrait être suffisant pour vous diriger dans la bonne direction.
OriginalL'auteur John Bode
Ce n'est pas possible. Vous pouvez allouer un tableau de char*, bien que:
OriginalL'auteur Olaf Dietsche