Comment échapper au signe % en utilisant printf
en C ?
printf("hello\%"); /* not like this */
Comment échapper au signe % en utilisant printf
en C ?
printf("hello\%"); /* not like this */
"printf("hello%%") ;" est correct. Mais ce n'est pas un échappement je pense. utiliser printf("hello \045 ") ;
@Pablo Santa Cruz : cette méthode pour "s'échapper" %
est spécifique à printf
n'est-ce pas ?
Pour les fonctions formatées (afaik ils se terminent tous avec un f
) en général, en effet !
Comme d'autres l'ont dit, le %% échappera au %.
Notez cependant que vous ne devez jamais faire cela :
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Chaque fois que vous devez imprimer une chaîne, toujours, toujours, toujours, toujours l'imprimer en utilisant
printf("%s", c)
pour empêcher un % embarqué de causer des problèmes (violations de la mémoire, défauts de segmentation etc.).
L'avertissement est généralement approprié, mais il peut y avoir des situations dans lesquelles vous voulez faire "ceci" - tant que vous savez que la chaîne que vous fournissez sera interprétée comme une chaîne de format.
J'ai trouvé une solution alternative une fois - copier le tampon vers un autre tampon et ensuite le parcourir en doublant les signes %. J'ai fini par trouver cette idée et j'ai remplacé une fonction de 20-30 lignes par une seule ligne. Ne vous inquiétez pas, je me suis battu sévèrement sur la tête, comme je le méritais.
C'est vrai, mais n'oubliez pas que 99% du temps, lorsque vous obtenez une chaîne de format, vous obtenez les arguments sous forme de va_list, et vous devez donc utiliser vprintf. Donc, je suis techniquement correct ;)
Ajoute également un saut de ligne [même si vous en avez déjà un]. Si vous voulez cela, tant mieux. Sinon...
Pique-nique :
Vous ne pouvez pas vraiment échapper à la %
dans la chaîne de caractères qui spécifie le format du printf()
(et scanf()
) de la famille de fonctions.
El %
dans le printf()
(et scanf()
), lance une spécification de conversion. L'une des règles de spécification de la conversion stipule qu'une fonction %
comme spécificateur de conversion (immédiatement après le %
qui a lancé la spécification de conversion) provoque un '%'
caractère à écrire, sans argument converti.
La chaîne vraiment a 2 '%'
à l'intérieur (par opposition à l'échappement des caractères : "a\bc"
est une chaîne de 3 caractères non nuls ; "a%%b"
est une chaîne de 4 caractères non nuls).
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.
0 votes
"hello\%"
ne fonctionne pas car il produit la chaîne de caractèreshello%
plus NUL, tout comme"hello%"
fait.0 votes
"hello\%"
ne fonctionne pas car... pour moi... il ne compile pas. J'ai utilisé Microsoft Visual Studio 2017. La compilation échoue avec le message :'%': unrecognized character escape sequence.