¿Qué significa el especificador de formato% * s?
-
05-07-2019 - |
Pregunta
En algunos códigos 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, "");
Solución
Se utiliza para especificar, de forma dinámica, cuál es el ancho del campo :
- El ancho no se especifica en la cadena de formato, sino como un adicional argumento de valor entero que precede al argumento que tiene que ser formateado.
entonces " sangría " especifica cuánto espacio asignar para la cadena que le sigue en la lista de parámetros.
Entonces,
printf("%*s", 5, "");
es lo mismo que
printf("%5s", "");
Es una buena manera de poner algunos espacios en su archivo, evitando un bucle.
Otros consejos
No utilice "% * s " en un búfer que no es NULL terminado (empaquetado) pensando que solo imprimirá " longitud " campo.
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 se debe formatear.
por ejemplo: printf ("% * s " ;, 4, myValue);
es equivalente a printf ("% 4s " ;, myValue);
.
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 generará es menos
que 4 posiciones de caracteres de ancho, el valor es justificado a la derecha
en el campo por defecto.
Si el valor es mayor
que 4 caracteres de ancho, el ancho del campo se expande
para acomodar el número apropiado de caracteres.
Para justificar el valor a la izquierda, use un número entero negativo para especificar el ancho del campo.
Referencias: Programa de Cómo de Java ™ (Temprano Objetos), Décima Edición
* Hace que fprintf rellene 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.