Initialisation tableau C
sophieeeeee
Messages postés
1396
Date d'inscription
Statut
Membre
Dernière intervention
-
nar6du14 Messages postés 459 Date d'inscription Statut Membre Dernière intervention -
nar6du14 Messages postés 459 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Initialisation tableau C
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
15 réponses
il faut faire :TabMes[20]={"chaine1","chaine2","chaine3","chaine4"....."chaine17","chaine18","chaine19","chaine20"};
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 : '{'
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 : '{'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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...
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...
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.
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.
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.
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.
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>...
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>...
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.
Attention, TabMes[]= est différent de TabMes= !
Et TabMes[]={}, c'est faux alors que TabMes={} c'est juste.
Tu peux trouver peut-être une réponse à la question ici : Initialiser un tableau en C.
Plusieurs solutions y sont évoquées.
Plusieurs solutions y sont évoquées.
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 );
}
}
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 );
}
}