Comment échappez-vous au signe% lors de l'utilisation printf
en C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
la source
la source
%
est spécifique àprintf
, n'est -ce pas?\045
est un échappement au moment de la compilation qui fait partie du langage et se transformera en une%
fois compilé.printf
est une fonction d'exécution, elle traite donc les octets de votre chaîne, pas le code source C, et elle a ses propres séquences d'échappement qui font partie de la fonction . En bref,printf
est une "langue à l'intérieur d'une langue", etprintf("This is a's value: %s\n", a);
donne le même résultat queprintf("This is a's value: \045\0163\012", a);
.printf("hello%c", '%');
. Cependant,%%
c'est mieux car il n'utilise pas d'autre argument.Comme d'autres l'ont dit, %% échappera au%.
Notez cependant que vous ne devriez jamais faire cela:
Chaque fois que vous devez imprimer une chaîne, imprimez-la toujours, toujours
pour empêcher un% intégré de causer des problèmes [violations de mémoire, erreur de segmentation, etc.]
la source
S'il n'y a pas de formats dans la chaîne, vous pouvez utiliser
puts
(oufputs
):s'il y a un format dans la chaîne:
Comme indiqué dans les commentaires,
puts
ajoute un\n
à la sortie etfputs
ne le fait pas.la source
puts
. Je n'ai jamais penséputs
à imprimer des cordes et j'ai sauté directement dessusprintf
. Plus maintenant.Avec lui-même ...
la source
Nitpick:
Vous n'échappez pas vraiment
%
à la chaîne qui spécifie le format de la famille de fonctionsprintf()
(etscanf()
).Dans
%
la famille de fonctionsprintf()
(etscanf()
), démarre une spécification de conversion. L'une des règles de spécification de conversion stipule qu'un en%
tant que spécificateur de conversion (immédiatement après le%
début de la spécification de conversion) entraîne'%'
l'écriture d' un caractère sans conversion d'argument.La chaîne contient vraiment 2
'%'
caractères à l'intérieur (par opposition aux caractères d'échappement:"a\bc"
est une chaîne avec 3 caractères non nuls;"a%%b"
est une chaîne avec 4 caractères non nuls).la source
utiliser un double %%
la source
Comme ça:
la source
La barre oblique inverse en C est utilisée pour échapper les caractères dans les chaînes. Les chaînes ne reconnaîtraient pas% comme un caractère spécial et, par conséquent, aucun échappement ne serait nécessaire. Printf est une autre affaire: utilisez %% pour imprimer un%.
la source
Vous pouvez utiliser %%:
Le résultat est:
la source
vous utilisez un spécificateur de format incorrect que vous devez utiliser
%%
pour l'impression%
. Votre code doit être:En savoir plus tous les formats utilisés dans spécificateurs C .
la source
Oui, utilisez printf ("bonjour %%"); et c'est fait.
la source
Vous pouvez simplement utiliser
%
deux fois, c'est-à-dire"%%"
Exemple:
la source
Le double '%' fonctionne également dans ".Format (…). Exemple (avec iDrawApertureMask == 87, fCornerRadMask == 0,05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
donne la valeur souhaitée et attendue de (contenu de la chaîne dans) csCurrentLine;"% ADD87C, 0,0500 *% "la source