337 votes

Comment créer un tableau de chaînes de caractères en C ?

J'essaie de créer un tableau de chaînes de caractères en C. Si j'utilise ce code :

char (*a[2])[14];
a[0]="blah";
a[1]="hmm";

gcc me donne "warning : assignment from incompatible pointer type". Quelle est la manière correcte de procéder ?

edit : Je suis curieux de savoir pourquoi cela devrait donner un avertissement du compilateur puisque si je fais printf(a[1]) ;, cela imprime correctement "hmm".

12voto

Bryce Points 1709

Si les cordes sont statiques, vous feriez mieux de les utiliser :

const char *my_array[] = {"eenie","meenie","miney"};

Bien qu'elle ne fasse pas partie du C ANSI de base, il y a de fortes chances que votre environnement supporte cette syntaxe. Ces chaînes sont immuables (en lecture seule) et, dans de nombreux environnements, elles sont moins coûteuses que la construction dynamique d'un tableau de chaînes.

Par exemple, dans les petits projets de microcontrôleurs, cette syntaxe utilise la mémoire du programme plutôt que la (généralement) plus précieuse mémoire RAM. AVR-C est un exemple d'environnement supportant cette syntaxe, mais la plupart des autres le font aussi.

11voto

Noldorin Points 67794

Dans l'ANSI C :

char* strings[3];
strings[0] = "foo";
strings[1] = "bar";
strings[2] = "baz";

9voto

dmckee Points 50318

Les littéraux de chaîne sont const char * s.

Et votre utilisation des parenthèses est étrange. Vous voulez probablement dire

const char *a[2] = {"blah", "hmm"};

qui déclare un tableau de deux pointeurs vers des caractères constants, et les initialise pour qu'ils pointent vers deux constantes de chaîne codées en dur.

3voto

Dario Points 26259

Votre code crée un tableau de pointeurs de fonctions. Essayez

char* a[size];

ou

char a[size1][size2];

à la place.

Voir les wikibooks pour tableaux et pointeurs

-8voto

IceCodr Points 1

Un bon moyen est de définir soi-même une chaîne de caractères.

#include <stdio.h>
typedef char string[]
int main() {
    string test = "string";
    return 0;
}

C'est vraiment aussi simple que cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X