Основной способ:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
Другой, часто более полезный способ:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
Здесь вы указываете длину в качестве аргумента int функции printf (), которая обрабатывает '*' в формате как запрос на получение длины из аргумента.
Вы также можете использовать обозначения:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
Это также аналогично обозначению "% 8.8s", но опять же позволяет вам указать минимальную и максимальную длину во время выполнения - более реалистично в таком сценарии, как:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
Спецификация POSIX printf()
определяет эти механизмы.
Джонатан Леффлер
источник
-
), чтобы довести его до полной указанной длины.% 8s будет указывать минимальную ширину 8 символов. Вы хотите усечь до 8, поэтому используйте% .8s.
Если вы хотите всегда печатать ровно 8 символов, вы можете использовать% 8.8s
источник
Помимо указания фиксированного количества символов, вы также можете использовать,
*
что означает, что printf принимает количество символов из аргумента:Печать:
источник
Используя
printf
вы можете сделатьЕсли вы используете C ++, вы можете добиться того же результата с помощью STL:
Или менее эффективно:
источник
ostream_iterator<char>(cout)
! Вместо этого используйтеostreambuf_iterator<char>(cout)
! Разница в производительности должна быть достаточно большой.std::cout.write(s.data(), 8)
. Или в современном C ++std::cout << std::string_view{s.data(), 8}
.Выведите первые четыре символа:
printf("%.4s\n", "A string that is more than 8 chars");
См. Эту ссылку для получения дополнительной информации (проверьте .precision -section)
источник
В C ++ это просто.
РЕДАКТИРОВАТЬ: также безопаснее использовать это со строковыми итераторами, чтобы не сбежать с конца. Я не уверен, что происходит с printf и слишком короткими строками, но я думаю, это может быть безопаснее.
источник
std::cout << someStr.substr(0,8);
гораздо очевиднее.Е (..... "%. 8s")
источник
В C ++ я делаю это так:
Обратите внимание, что это небезопасно, потому что при передаче второго аргумента я могу выйти за пределы размера строки и создать нарушение доступа к памяти. Чтобы этого избежать, необходимо реализовать собственную проверку.
источник