A maneira básica é:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
A outra maneira, muitas vezes mais útil, é:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
Aqui, você especifica o comprimento como um argumento int para printf (), que trata o '*' no formato como uma solicitação para obter o comprimento de um argumento.
Você também pode usar a notação:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
Isso também é análogo à notação "% 8.8s", mas novamente permite especificar os comprimentos mínimo e máximo em tempo de execução - mais realisticamente em um cenário como:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
A especificação POSIX para printf()
define esses mecanismos.
-
) para compensar o comprimento especificado completo.% 8s especificaria uma largura mínima de 8 caracteres. Você deseja truncar às 8, então use% .8s.
Se você quiser imprimir sempre exatamente 8 caracteres, poderá usar% 8.8s
fonte
Além de especificar uma quantidade fixa de caracteres, você também pode usar o
*
que significa que printf recebe o número de caracteres de um argumento:Impressões:
fonte
Usando
printf
você pode fazerSe você estiver usando C ++, poderá obter o mesmo resultado usando o STL:
Ou, com menos eficiência:
fonte
ostream_iterator<char>(cout)
! Em vez disso, useostreambuf_iterator<char>(cout)
! A diferença no desempenho deve ser bastante grande.std::cout.write(s.data(), 8)
. Ou no C ++ modernostd::cout << std::string_view{s.data(), 8}
,.Imprima os quatro primeiros caracteres:
printf("%.4s\n", "A string that is more than 8 chars");
Consulte este link para obter mais informações (consulte a seção .precision)
fonte
Em C ++ é fácil.
EDIT: Também é mais seguro usar isso com iteradores de string, para que você não saia do fim. Não tenho certeza do que acontece com printf e string muito curtos, mas acho que isso pode ser mais seguro.
fonte
std::cout << someStr.substr(0,8);
é muito mais óbvio.printf (..... "%. 8s")
fonte
Em C ++, faço da seguinte maneira:
Observe que isso não é seguro porque, ao passar o segundo argumento, posso ir além do tamanho da string e gerar uma violação de acesso à memória. Você precisa implementar sua própria verificação para evitar isso.
fonte