funcion - tabla printf
¿Qué significa el especificador de formato%*s? (5)
* Hace que fprintf llene la salida hasta que tenga n caracteres de ancho, donde n es un valor entero almacenado en el argumento de una función que precede al representado por el tipo modificado.
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
En algún código que tengo que mantener, he visto un especificador de formato %*s
. ¿Alguien puede decirme qué es esto y por qué se usa?
Un ejemplo de su uso es como:
fprintf(outFile, "/n%*s", indent, "");
El especificador de formato% 4s genera una Cadena en un ancho de campo de 4, es decir, printf muestra el valor con al menos 4 posiciones de caracteres.
Si el valor que se va a generar tiene less
de 4 caracteres de ancho, el valor se right justified
a la right justified
en el campo de forma predeterminada.
Si el valor es greater
que 4 posiciones de posiciones de ancho, el ancho del campo se expands
para acomodar el número apropiado de caracteres.
A la izquierda, justifique el valor, use un entero negativo para especificar el ancho del campo.
Referencias: Java ™ How to Program (Early Objects), décima edición
No use "% * s" en un búfer que no tenga terminación NULL (empaquetado), pensando que imprimirá solo el campo "longitud".
Se usa para especificar, de una manera dinámica, cuál es el ancho del campo :
- El ancho no se especifica en la cadena de formato, sino como un argumento de valor entero adicional que precede al argumento que debe formatearse.
así que "sangría" especifica cuánto espacio asignar para la cadena que lo sigue en la lista de parámetros.
Asi que,
printf("%*s", 5, "");
es lo mismo que
printf("%5s", "");
Es una buena forma de poner espacios en su archivo, evitando un bucle.
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
El ancho no se especifica en la cadena de formato, sino como un argumento de valor entero adicional que precede al argumento que debe formatearse.
por ejemplo: printf("%*s", 4, myValue);
es equivalente a printf("%4s", myValue);
.