Language C
dancingmad
-
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
dans un soucis de clarification d'un code source en C, je cherche a definir une constante, LG_STR, qui represente la longueur d'une chaine de caractere standard. Je l'ai donc naturellement definie comme ceci:
#define LG_STR 32
et j'ai remplac'e le nombre 32 par LG_STR dans tout le prog.
Le probleme est que je n'arrive pas a le faire directement dans un scanf:
char s[LG_STR];
scanf("%LG_STRs",s); /* ne compile pas */
et j'ai beau chercher, je ne trouve pas la synthaxe a utiliser pour le faire.
J'ai pens'e creeer une fonction qui renvoie la bonne chaine de caractere, avec un fscanf, mais je voudrais que l'operation se fasse a la compilation. Y a-t-il un moyen ?
Merci d'avance.
ps: desol'e pour les accents, clavier qwerty oblige...
dans un soucis de clarification d'un code source en C, je cherche a definir une constante, LG_STR, qui represente la longueur d'une chaine de caractere standard. Je l'ai donc naturellement definie comme ceci:
#define LG_STR 32
et j'ai remplac'e le nombre 32 par LG_STR dans tout le prog.
Le probleme est que je n'arrive pas a le faire directement dans un scanf:
char s[LG_STR];
scanf("%LG_STRs",s); /* ne compile pas */
et j'ai beau chercher, je ne trouve pas la synthaxe a utiliser pour le faire.
J'ai pens'e creeer une fonction qui renvoie la bonne chaine de caractere, avec un fscanf, mais je voudrais que l'operation se fasse a la compilation. Y a-t-il un moyen ?
Merci d'avance.
ps: desol'e pour les accents, clavier qwerty oblige...
Configuration: Solaris Firefox 2.0.0.6
5 réponses
-
Le premier argument de scanf, qui précise le type de ce qui sera entré, c'est soit %s (chaine de caractère), %d (pour un entier), %f (flottant) etc... Mais dans ton code ça donne %32 ce qui n'a pas de sens. Remplace %LG_STR par %s
-
Ah oui d'accord, faut faire précéder ta variable du signe dièse pour la conversion d'une constante préprocesseur en chaine:
scanf("%" #LG_STR "s",s);
Ce qui donnera après le traitement du préprocesseur:scanf("%" "32" "s",s);
Ce qui donnera après le passage du compilateur:scanf("%32s",s);
Voilà ça devrait marcher. -
J'avour que je suis pas trop sûr de moi sur ce coup là. Sinon essaie ça:
#define MON_PRINTF(l,s) printf("%" #l "s", s) MON_PRINTF(#LG_STR, chaine); -
Merci beaucoup !
C'est la 2e solution qui marche. Et on peut mettre ou non le # devant LG_STR dans l'appel de la macro. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ah oui au moment de l'appel de la macro j'ai mis le dièse mais j'ai pas fait exprès, normalement faut pas le mettre.