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, "");
¿Fue útil?

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top