boudafc
Messages postés48Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention18 juillet 2008
-
29 avril 2008 à 09:22
boudafc
Messages postés48Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention18 juillet 2008
-
29 avril 2008 à 10:15
Bonjour,
je souhaite pouvoir définir dans un #define tout le contenu d'un tableau comme suit:
#define CHAMPS ""TOTO", "TATA", "TITI""
et dans mon code:
char tabChamps[][512] = {CHAMPS};
tout ceci pour que l'utilisateur n'ait qu'à modifier le define dans le *.h et pas à aller chercher une ligne dans le code pour modifier le contenu du tableau...
problème, lorsque je fais:
printf("%s\n", tabChamps[0]);
j'obtient:
"TOTO", "TATA", "TITI"
et non TOTO
quelqu'un sait pourquoi ? car normalement à la compilation tout le code est remplacé par le define...
Sinon, comment faire pour faire la même chose de manière aussi "simple" ou plutôt transparente à l'utilisation ?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 29 avril 2008 à 09:50
Bonjour,
Il est tout à fait normal que #define CHAMPS "TOTO", "TATA", "TITI" soit bon ! CHAMPS est défini avec le contenu exact de ce qui doit apparaître entre les accolades. Le préprocesseur se contente de faire une substitution exacte avec les #define.
Dans #define CHAMPS ""TOTO", "TATA", "TITI"", les 3 éléments sont transformés en une seule chaîne de caractères ! Il n'y a donc que tabChamps[0] qui soit initialisé. Ne pas confondre le guillemet d'encadrement de chaîne (") et le guillemet qui doit apparaître tel quel dans une chaîne (").
boudafc
Messages postés48Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention18 juillet 2008 29 avril 2008 à 09:25
Bon, malgrès les différents tests que j'avais fait avant de poster, j'ai trouvé la solution (qui me semblait pourtant peu probable...)
il faut faire:
#define CHAMPS "TOTO", "TATA", "TITI"
tout simplement. ceci pourra peut-être en aider certains un jour ou l'autre....