Initialisation tableau C

Fermé
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 - 9 juin 2008 à 14:35
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 - 24 sept. 2013 à 18:39
Bonjour,
j'ai un tableau déclarer comme ceci:

char ** TabMes;
TabMes = calloc(20,sizeof(char*));
je voudrais l'initialiser comme ceci mais ca ne marche pas.quellqu'un aurait il une idée?
TabMes[20]={
"chaine1",
"chaine2",
"chaine3",
"chaine4",
"chaine5",
"chaine6",
"chaine7",
"chaine8",
"chaine9",
"chaine10",
"chaine11",
"chaine12",
"chaine13",
"chaine14",
"chaine15",
"chaine16",
"chaine17",
"chaine18",
"chaine19",
"chaine20"
};

merci

15 réponses

shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
9 juin 2008 à 14:39
il faut faire :TabMes[20]={"chaine1","chaine2","chaine3","chaine4"....."chaine17","chaine18","chaine19","chaine20"};
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 14:42
Mais c'est ce que je fais non?Je crois bien que si.
0
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
9 juin 2008 à 14:51
essai comme je t'ai dit
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 14:57
quand je fais :
TabMes[20]={"chaine1","chaine2","chaine3","chaine4","chaine5","chaine6","chaine7","chaine8","chaine9","chaine10","chaine11","chaine12","chaine13","chaine14","chaine15","chaine16","chaine17","chaine18","chaine19","chaine20"};

le compilateur me met comme erreur: error C2059: syntax error : '{'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 juin 2008 à 15:03
l'iitiallisation statique, ne fonctionne qu'avec les variables constante. Soit tu fait :
const char** TabMes={"haine1",...};
soit tu fait :
char** TabMes;
TabMes=(const char**){"chaine 1",...};

Il est inutile d'allouer de l'espace pour TabMes avec alloc, car tu le fait pointé vers une "variable" en const char** (donc sur la pile je crois)

Note pour shuya, en C les retours à la lignes ont très peut d'effet : à par dans une chaine de caractère, je ne connait aucun cas où ça change quelque chose d'en mettre ou non.
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 15:08
j'ai changé comme tu m'a dis :

TabMes[20]=(const char**){"chaine0",
"chaine1",
"chaine2",
"chaine3",
"chaine4",
"chaine5",
"chaine6",
"chaine7",
"chaine8",
"chaine9",
"chaine10",
"chaine11",
"chaine12",
"chaine13",
"chaine14",
"chaine15",
"chaine16",
"chaine17",
"chaine18",
"chaine19"
};

mais j'ai toujours cette erreur:

error C2059: syntax error : '{'
Je vais devenir folle...
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 15:09
excuse :
TabMes=(const char**){"chaine0",...};
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 juin 2008 à 15:19
essai :
const char** tmp={"chaine0","chaine1"...19"};
puis
TabMes=(char**)tmp
Quoi, que c'est ma faute, je te dis d'essayer un transtypage qui n'est pas bon {"...",...} c'est un const char**. Donc, en fait c'était ça qu'il fallait essayer :
TabMes=(char**){"chaine0",
"chaine1",
"chaine2",
"chaine3",
"chaine4",
"chaine5",
"chaine6",
"chaine7",
"chaine8",
"chaine9",
"chaine10",
"chaine11",
"chaine12",
"chaine13",
"chaine14",
"chaine15",
"chaine16",
"chaine17",
"chaine18",
"chaine19"
};
La solution avec tmp fonctionne. Si ce n'est pas le cas, ça viens du compilateur, car chez moi ça foncionne.
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 15:23
ok merci beaucoup pour votre aide mais ca ne marche toujours pas.Tempi.
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 15:25
ce que je ne comprends pas c'est pourquoi TabMes[2]="essai"; fonctionne alors que le reste non
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 juin 2008 à 15:39
TabMes[2]="essai" fonctionne d'après ce que dit ton compilateur car il n'y a pas de d'accolade '{'.
Soit ton compilateur n'accepte pas ce type de déclaration de constante, soit il n'accepte pas l'accolade (mais dans ce cas là il devrais se manifester beaucoup plus tôt).
En tout cas, avec gcc ça fonctionne.
essai la chose toute simple suivante :
int const entierN[]={0,1,2,3,4,5,6,7,8,9 };
Si ça ne fonctionne toujours pas, il doit ya voir un problème ailleurs.
0
sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
9 juin 2008 à 15:48
j'ai essayer avec des parenthese:
TabMes[20]=("chaine0",
"chaine1",
"chaine2",
"chaine3",
"chaine4",
"chaine5",
"chaine6",
"chaine7",
"chaine8",
"chaine9",
"chaine10",
"chaine11",
"chaine12",
"chaine13",
"chaine14",
"chaine15",
"chaine16",
"chaine17",
"chaine18",
"chaine19"
);
pour je ne sais qu'elle raison je n'ai plus d'erreur mais quand je veux afficher mon tableau voici ce que 'jai comme resultat :

<null>
<null>
<null>...
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 juin 2008 à 16:28
si TabMes est de type char** c'est normal, tu affectes seulement la valeur 20.
Attention, TabMes[]= est différent de TabMes= !
Et TabMes[]={}, c'est faux alors que TabMes={} c'est juste.
0
Antoine Crochet-Damais Messages postés 16 Date d'inscription vendredi 11 mars 2011 Statut Webmaster Dernière intervention 8 janvier 2014 1 240
Modifié par Antoine Crochet-Damais le 13/09/2013 à 15:26
Tu peux trouver peut-être une réponse à la question ici : Initialiser un tableau en C.

Plusieurs solutions y sont évoquées.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 sept. 2013 à 15:29
Jolie déterrage de message.
0
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
24 sept. 2013 à 18:39
c'est simple

char** tab = (char** )malloc( 20* sizeof(char*));
memset(tab, 0, 20 * sizeof(char*)); // faut que tes pointeurs soient tous à nul pour ne pas aller écrire ailleurs

//tu crées ensuite un tableau statique

TabMes[20]={
"chaine1",
"chaine2",
"chaine3",
"chaine4",
"chaine5",
"chaine6",
"chaine7",
"chaine8",
"chaine9",
"chaine10",
"chaine11",
"chaine12",
"chaine13",
"chaine14",
"chaine15",
"chaine16",
"chaine17",
"chaine18",
"chaine19",
"chaine20"
};

//initialiser tout ça
void initialize(char** f, int size_of_f, char** value)
{
int i = 0;
int len = 0;
for(i = 0; i < size_of_f; i++)
{
len = strlen( value [ i ] );
f [ i ] = (char *)malloc( len );
memset( f [ i ], value [ i ], len );
}
}
0