1

Salut !

Habitué du Delphi, je viens de me mettre au C pour programmer sur notre Gepette adorée. Seulement toutes ses subtilités m'échappent encore, et j'ai petit problème qui me pourrit la vie ;

Je cherche à faire des tableaux de caractères afin de stoquer des phrases. Si j'ai bien compris, ils n'y a pas de type string en C, mais juste des tableaux de char. J'utilise donc la syntaxe suivante :

typedef char ChaineDeCaracteres[30];

const ChaineDeCaracteres Tableau[4] =
{
"Element A", "Element B", "Element C", "Element D"
};

Je peux réutiliser ces éléments en les passant à une fonction sous la forme :

AffElement ( (char*)Tableau[0] );

avec le prototype de AffElement : void AffElement ( char Texte[30] );

Mais si je veux le récupérer dans une procédure et que je fais ça :

char Texte[30]

Texte = Tableau[0];

Le compilo me dit "incompatible types in assignment" ...

Donc mes questions :

1 . Y'a-t-il une façon plus simple de gérer les chaines de caractères en C ?
2 . Quelle est la cause de l'erreur de compilation ?

Voilà, je vous remercie d'avance du temps que vous avez prit à lire mon long post, et si vous avez quelque idée, je suis ouvert à toute suggestion ...

Bobafeth

2

bon deja tu vire ton typedef et tu mets:

[code]
char *tab[4] =
{
"toto",
"titi",
"tata",
}


void aff_element(char *elem);

et:

aff_element(tab[2]);

[/code]

et c'est une _tres_ mauvaise idee de changer le type char...
char c'est un octet (8 bits), ca a rien a voir avec les chaines de caractere a la base...
incompatible types pke tu lui passe un tableau de chars de taille fixe (30), pas un pointeur sur un tableau de taille fixe ou quelconque...
et ta fonction affElement tu l'as prototypee comment?

si t'as marque
affElement(char elem[32]); en gardant ton typedef, ce qu'elle attendra vraiment c'est:

affElement(char elem[30][30]);

triso

en plus tu caste de force son parametre (en faisant AffElement((char*)Tableau[0])wink

alors non seulement tu lui passe un tableau de 30 chars directement, alors que elle attend 30 tableaux de 30 chars, mais en plus tu lui fait croire que c'est un pointeur sur un char..

pour les chaines, si t'ecris:

char *toto;

toto = "badc";
printf("%p\n", toto);

et que ca t'affiche (je sais pas comment c'est foutu les printf sur gp, ni meme si ca a ete porte):

0x4200

alors t'auras:

addr:
0x4200 : 98 (caractere 'b')
0x4201 : 97 ('a')
0x4202 : 100 ('d')
0x4203 : 99 ('c')
0x4204 : 0 (caractere de fin de chaine, c'est toujours 0)

tout ce que t'as a faire, c'est passer le pointeur vers le premier caratere de ta chaine, dont passer un char *

char *toto;

toto = 0x4200;
printf("%s\n", toto);

afficherait:

bacd

suivi d'un retour a la ligne...
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

3

Merci bien. Pour l'instant, je m'en sortait en faisant strcpy(Texte, Tableau[0]), mais je vais essayer de recommencer avec ce que tu m'as donné !

Bobafeth