Le passage d'un tableau de chaînes de caractères à une fonction C par référence
Je vais avoir un moment difficile le passage d'un tableau de chaînes à une fonction par référence.
char* parameters[513];
Cela représente 513 cordes? Voici comment j'ai initialisé le premier élément:
parameters[0] = "something";
Maintenant, j'ai besoin de passer 'paramètres' à une fonction par référence, de sorte que la fonction peut ajouter plusieurs cordes à elle. Comment aurait-tête de la fonction rechercher et comment puis-je utiliser cette variable dans la fonction?
- Non, il n'est pas matérielle.
- Le problème c'est que votre "chaînes" restent non initialisés, de sorte que votre deuxième extrait de code corrompre votre mémoire.
Vous devez vous connecter pour publier un commentaire.
Vous l'avez déjà obtenu.
En C, lorsque vous passer un tableau à une fonction, le compilateur transforme le tableau en un pointeur. (Le tableau "désintègre" dans un pointeur.) Le "func" ci-dessus est exactement équivalent à:
Depuis un pointeur vers le tableau est transmis, lorsque vous modifiez le tableau, vous êtes en train de modifier le tableau original et non une copie.
Vous pouvez lire sur la façon dont les pointeurs et les tableaux de travail en C. Contrairement à la plupart des langues, en C, les pointeurs (références) et les tableaux sont traités de la même manière dans de nombreuses façons. Un tableau parfois se désintègre en un pointeur, mais seulement dans des circonstances très précises. Par exemple, cela ne fonctionne pas:
arr
qui est un[4][6]
tableau contenant 4 cordes, 5 caractères pour unfunc
qui prend char ** comme argument. Mais je ne suis pas en mesure de récupérer les chaînes que j'ai remplie dans le destinataire de l'appel de fonction à l'intérieur de la fonction appeléefunc
. Toute aide serait génial!char **x
etchar y[4][6]
sont totalement incompatibles les uns avec les autres. Le compilateur doit vous donner des messages d'erreur.char **
est un pointeur verschar *
. Toutefois, si vous commencez avecchar y[4][6]
, il n'y a paschar *
n'importe où! Donc vous ne pouvez pas avoir un pointeur surchar *
.char* parameters[513];
est un tableau de 513 pointeurs verschar
. C'est l'équivalent dechar *(parameters[513])
.Un pointeur vers cette chose est de type
char *(*parameters)[513]
(ce qui est équivalent àchar *((*parameters)[513])
), de sorte que votre fonction pourrait ressembler à:Ou, si vous voulez une référence C++:
char *parameters[513]
?