Tengo un fragmento de código en el que hay un
printf("%.*s\n")
que %.*s
significa
c
printf
format-specifiers
Shaobo Wang
fuente
fuente
printf
llamada válida .Respuestas:
Puede usar un asterisco (
*
) para pasar el especificador de ancho / precisiónprintf()
, en lugar de codificarlo en la cadena de formato, es decirfuente
str_len
argumento debe tener tipoint
(o tipo integral más estrecho, al que se promoveríaint
). Sería un error pasarlong
,size_t
, etc.%s
, es imprimir una subcadena de la cadena original. En este caso de uso,str
apuntaría a algún lugar dentro de la cadena original (posiblemente al principio) ystr_len
especificará la longitud de la subcadena que se debe imprimir.Más detallado aquí .
Entonces, si probamos ambas especificaciones de conversión
obtenemos la salida:
fuente
No creo que el código anterior sea correcto, pero (de acuerdo con esta descripción de
printf()
) los.*
mediosEntonces es una cadena con un ancho aceptable como argumento.
fuente
int
(o un subconjunto de él), no cualquier valor integral como más intuitivosize_t
o sus posibles alias, comostd::string::size_type
. Esto es aún más confuso, teniendo en cuenta que la página a la que se hace referencia se mencionasize_t
como uno de los especificadores de tipo admitidos.Ver: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
fuente