Tengo un fragmento de código en el que hay un
printf("%.*s\n")
que %.*ssignifica
c
printf
format-specifiers
Shaobo Wang
fuente
fuente

printfllamada 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_lenargumento 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,strapuntaría a algún lugar dentro de la cadena original (posiblemente al principio) ystr_lenespecificará 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_to 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_tcomo uno de los especificadores de tipo admitidos.Ver: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
fuente