comment passer tableau de pointeur de pointeurs à une fonction?

Je sais comment modifier un tableau de pointeurs dans main, mais je ne sais pas comment le faire lorsque ma fonction doit le modifier. Le code entre ** est la façon dont je le fais en main sans utiliser de fonction. Je sais comment imprimer le tableau de pointeur de pointeur dehors. Ma question est la suivante: supposons que je veuille déplacer ces lignes ** dans function (), que dois-je modifier?

code:

#include #include #include void function(char *array[], int size); void function_print(char *array[], int size); int main() { char *array[] = {0}; char word[20]; **scanf("%s", word); int len = strlen(word) + 1; array[size] = (char *)malloc(sizeof(len)); strlcpy(array[size], word, sizeof(array[size]));** function(array, 0); return 0; } void function(char *array[], int size) { } void function_print(char *array[], int size) { for(int x = 0; x < size; x ++) { printf("%s", *array); (array)++; } } ~ ~ 

J’ai fait quelques modifications et j’ai réalisé que votre fonction ferait de même. Alors continuez et lisez l’ EDIT si vous ne savez pas comment cela fonctionne.

En plus je pense qu’il y a quelque chose qui cloche dans votre main (). Tout d’abord, array [size] = (char *) malloc (sizeof (len)); a tendance à signaler une erreur car aucune taille n’est définie ici. Deuxièmement, si par taille vous entendez le nombre d’éléments dans un tableau, alors tableau [taille] provoquerait un débordement. Troisièmement, l’argument de malloc devrait être sizeof (char) * len, pas sizeof (len), puisque ce dernier est égal à sizeof (int).

Changer votre fonction à

 void function(char **, int); 

Et appelez par

 function(array, 0); 

MODIFIER

Je pense que par “modifier” vous voulez changer les pointeurs stockés dans le tableau. Étant donné que chaque élément est un caractère char* , un caractère char** fera le travail.

Lorsque vous transmettez un array en tant qu’argument, vous transmettez en réalité l’ adresse du premier élément. Ensuite, dans la fonction, vous le recevez avec un char** parray . Etant donné que vous avez également passé la taille, vous pouvez l’utiliser comme char* parray[] , et l’adresse de chaque élément est exactement la même chose avec array dans main() . Ainsi, toute modification effectuée avec parray changera de array . Est-ce que c’est ce que tu veux?

Vous ne faites aucune erreur en appelant la fonction et en transmettant le tableau de pointeurs de caractères. C’est un bon moyen. Votre programme n’a pas été compilé pour moi, donc quelques changements mineurs ont été apportés. Ça marche.

  #include #include #include #include #include #include void function(char *array[], int size); int main() { char *array[] = {0}; char word[20]; scanf("%s", word); int len = strlen(word) + 1; array[0] = (char *)malloc(sizeof(len)); //that how I do it in main without using a function. strcpy(array[0], word); function(array, 0); return 0; } void function(char *array[], int size) { char * temp = new char[strlen(array[0])+1]; strcpy(temp, array[0]); printf(temp, 's'); } 

En écrivant ceci:

void function(char *array[], int size)

et ça:

void function(char **array, int size)

sont les mêmes dans ce contexte.

Si vous définissez une fonction comme celle-ci, il n’est pas nécessaire de la déclarer comme telle, vous pouvez la déclarer comme void function(char **, int ); : void function(char **, int );

déclaration ne décrit que le type de retour et le type d’arguments d’une fonction. Maintenant, quelques autres recommandations:

N’utilisez pas scanf comme ceci:

scanf("%s", word);// you need to specify field width in case of ssortingngs otherwise it will overwrite buffer in case of large ssortingngs .

scanf("%19s",word);

size n’est pas définie dans votre texte principal, je préférerais plutôt procéder ainsi:

 size_t len = sizeof(word) + 1;// yes, try to use size_t when returning number of bytes *array = (char*)malloc(sizeof len);// casting malloc is not recommended though. strncpy(*array, word,len); 

Essayez de faire:

 void function(char *array, int size)(); 

Et au lieu de:

 function(array,0); 

parce que le tableau lui-même est une adresse memroy.