¿Cómo escapar el signo% (por ciento) en printf de C?
-
13-09-2019 - |
Pregunta
¿Cómo se puede escapar el signo% cuando se utiliza printf
en C?
printf("hello\%"); /* not like this */
Solución
Puede escapar de ella mediante la publicación de un doble '%' como esto: %%
Usando su ejemplo:
printf("hello%%");
Escapar signo '%' es sólo para printf. Si lo hace:
char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);
Se imprimirá: This is a's value: %%
Otros consejos
Como otros han dicho, %% escapará a la%.
Tenga en cuenta, sin embargo, que nunca se debe hacer esto:
char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);
Cada vez que se tiene que imprimir una cadena, siempre, siempre, siempre imprimirlo utilizando
printf("%s", c)
para evitar que un% incrustado de causar problemas [violaciónes de memoria, segfault, etc]
Con la misma ...
printf("hello%%"); /* like this */
nitpick:
En realidad, no escapar de la %
en la cadena que especifica el formato para el printf()
(y scanf()
) familia de funciones.
El %
, en la familia printf()
(y scanf()
) de funciones, inicia una especificación de conversión. Una de las reglas para la especificación de conversión indica que una %
como un especificador de conversión (inmediatamente después de la %
que inició la especificación de conversión) provoca un carácter '%'
para ser escrita con ningún argumento convertido.
La cadena realmente tiene 2 caracteres '%'
dentro (en contraposición a escapar caracteres: "a\bc"
es una cadena con 3 caracteres no nulos; "a%%b"
es una cadena con 4 caracteres no nulos).
utilizar un doble %%
De esta manera:
printf("hello%%");
//-----------^^ inside printf, use two percent signs together
La barra invertida en C se utiliza para escapar caracteres en cadenas. Las cadenas no se reconocen% como un carácter especial, y por lo tanto no sería necesario ningún escape. Printf es otra cuestión:. %% utilizar para imprimir un%
Sí, uso printf ( "hola %%"); y se hace.
Usted puede simplemente utilizar %
dos veces, es decir "%%"
Ejemplo:
printf("You gave me 12.3 %% of profit");
Puede utilizar %%:
printf("100%%");
El resultado es:
100%
está utilizando especificador de formato incorrecto se debe utilizar para la impresión %%
%
. El código debe ser:
printf("hello%%");
El '%' doble trabaja también en" .formato (...).
Ejemplo (con iDrawApertureMask == 87, fCornerRadMask == 0.05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
da el valor deseado y esperado de (contenido de la cadena en) csCurrentLine;
"ADD87C%, 0,0500% *"