web-dev-qa-db-fra.com

Comment échapper au signe% (pour cent) du printf de C?

Comment échapper au signe% en utilisant printf en C?

printf("hello\%"); /* not like this */
246
Chris_45

Vous pouvez y échapper en publiant un double '%' comme ceci: %%

En utilisant votre exemple:

printf("hello%%");

Le signe '%' échappé n'est valable que pour printf. Si tu fais:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

Il imprimera: This is a's value: %%

369
Pablo Santa Cruz

Comme d'autres l'ont dit, %% échappera au%.

Notez cependant que vous ne devriez jamais faire ceci:

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

Chaque fois que vous devez imprimer une chaîne, imprimez-la toujours, toujours, toujours en utilisant

printf("%s", c)

pour empêcher un% incorporé de causer des problèmes [violations de mémoire, erreur de segmentation, etc.]

34
Mikeage

S'il n'y a pas de format dans la chaîne, vous pouvez utiliser puts (ou fputs ):

puts("hello%");

s'il y a un format dans la chaîne:

printf("%.2f%%", 53.2);

Comme indiqué dans les commentaires, puts ajoute un \n à la sortie et fputs ne le fait pas.

29
Sinan Ünür

Avec lui-même ...

printf("hello%%"); /* like this */
9
martin clayton

Nitpick:
Vous n'échappez pas vraiment le % dans la chaîne qui spécifie le format de la famille de fonctions printf() (et scanf()).

Le %, dans la famille de fonctions printf() (et scanf()), lance une spécification de conversion. L'une des règles pour la spécification de conversion indique qu'un % en tant que spécificateur de conversion (immédiatement après le % qui a démarré la spécification de conversion) entraîne l'écriture d'un caractère '%' sans argument converti.

La chaîne vraiment contient 2 caractères '%' (contrairement aux caractères d'échappement: "a\bc" est une chaîne contenant 3 caractères non nuls; "a%%b" est une chaîne contenant 4 caractères non nuls).

7
pmg

utiliser un double %%

6
jldupont

Comme ça:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
4
Salman A

La barre oblique inverse en C est utilisée pour échapper des caractères dans des chaînes. Les chaînes ne reconnaîtront pas% comme un caractère spécial et aucune évasion ne sera donc nécessaire. Printf est une autre affaire: utilisez %% pour imprimer un%.

3

Oui, utilisez printf ("hello %%"); et c'est fait.

2
Kevin

si vous utilisez un spécificateur de format incorrect, vous devez utiliser %% pour imprimer %. Votre code devrait être: 

printf("hello%%");  

En savoir plus tous les spécificateurs de format utilisés dans C .

2
Pankaj Prakash

Vous pouvez simplement utiliser % deux fois, c'est-à-dire "%%"

Exemple:

printf("You gave me 12.3 %% of profit");
2
Md Shahriar

Vous pouvez utiliser %%:

printf("100%%");

Le résultat est:

100%

2
Donald Duck

Le double '%' fonctionne également dans ".Format (…) . Exemple (avec iDrawApertureMask == 87, fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;gives la valeur souhaitée et attendue de (contenu de chaîne ) csCurrentLine; "% ADD87C, 0.0500 *%"

0
dindea