J'essaie de transmettre un tableau de chaînes de caractères (chaînes de style C) à une fonction. Cependant, je ne veux pas placer une taille maximale sur la longueur de chaque chaîne entrant dans la fonction, et je ne veux pas allouer les tableaux dynamiquement. Voici le code que j'ai écrit d'abord:Passer un tableau de chaînes de caractères à la fonction
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *s[])
{
printf("Entering Fun\n");
printf("s[1]=%s\n",(char *)s[1]);
}
int main(void)
{
char myStrings[2][12];
strcpy(myStrings[0],"7/2/2010");
strcpy(myStrings[1],"hello");
fun(myStrings);
return(0);
}
Je suis une faute de seg lorsqu'il est exécuté et l'avertissement suivant du compilateur: stackov.c: En fonction « principale »: stackov.c: 17: avertissement: passer l'argument 1 de 'fun' du type pointeur incompatible stackov.c: 5: note: attendu 'char **' mais l'argument est de type 'char (*) [12]'
Cependant, quand je change le principal() au suivant cela fonctionne:
int main(void)
{
char myStrings[2][12];
char *newStrings[2];
strcpy(myStrings[0],"7/2/2010");
strcpy(myStrings[1],"hello");
newStrings[0]=myStrings[0];
newStrings[1]=myStrings[1];
fun(newStrings);
return(0);
}
Est-ce que array [2] [12] n'est pas la même chose qu'un tableau de pointeurs de caractères quand il est passé à une fonction?
Cela a l'avantage de stocker uniquement le nombre réel de caractères requis pour les chaînes. L'inconvénient est qu'un pointeur (supplémentaire) est également alloué pour chaque chaîne. Mais la facilité d'utilisation des pointeurs est le principal avantage. –
Oui, je sais que cela a fonctionné, mais pour l'application réelle, je n'ai pas pu initialiser le tableau au moment de la compilation. – Mike
@Mike: Lorsque vous l'utilisez dans une fonction, le tableau est réellement initialisé au moment de l'exécution. – jpalecek