La forma básica es:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
La otra forma, a menudo más útil, es:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
Aquí, especifica la longitud como un argumento int para printf (), que trata el '*' en el formato como una solicitud para obtener la longitud de un argumento.
También puedes usar la notación:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
Esto también es análogo a la notación "% 8.8s", pero nuevamente le permite especificar las longitudes mínima y máxima en tiempo de ejecución, de manera más realista en un escenario como:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
La especificación POSIX para printf()
define estos mecanismos.
-
) para completar la longitud especificada.% 8s especificaría un ancho mínimo de 8 caracteres. Desea truncar a las 8, así que use% .8s.
Si desea imprimir siempre exactamente 8 caracteres, puede usar% 8.8s
fuente
Además de especificar una cantidad fija de caracteres, también puede usar lo
*
que significa que printf toma el número de caracteres de un argumento:Huellas dactilares:
fuente
Usando
printf
usted puede hacerSi está usando C ++, puede lograr el mismo resultado usando el STL:
O, de manera menos eficiente:
fuente
ostream_iterator<char>(cout)
! En cambio,ostreambuf_iterator<char>(cout)
¡ usa ! La diferencia en el rendimiento debería ser bastante grande.std::cout.write(s.data(), 8)
. O en C ++ moderna,std::cout << std::string_view{s.data(), 8}
.Imprima los primeros cuatro caracteres:
printf("%.4s\n", "A string that is more than 8 chars");
Consulte este enlace para obtener más información (consulte la sección .precision)
fuente
En C ++ es fácil.
EDITAR: también es más seguro usar esto con iteradores de cadena, por lo que no se escapa al final. No estoy seguro de qué sucede con printf y string que son demasiado cortos, pero supongo que esto puede ser más seguro.
fuente
std::cout << someStr.substr(0,8);
Es mucho más obvio.printf (..... "%. 8s")
fuente
En C ++, lo hago de esta manera:
Tenga en cuenta que esto no es seguro porque al pasar el segundo argumento puedo ir más allá del tamaño de la cadena y generar una violación de acceso a la memoria. Debe implementar su propio control para evitar esto.
fuente