Как я могу распечатать строку non-null-terminated с помощью printf, предположив, что я знаю длину строки во времени выполнения?
printf("%.*s", length, string);
Использовать вместе с другими args:
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^
В C вы можете указать максимальную длину для вывода с помощью формата %.123s
. Это означает, что длина выводимого текста не более 123 символов. 123
можно заменить на *
, тогда длина будет браться из аргумента printf, а не жестко кодироваться.
Обратите внимание, что это предполагает, что строка
не содержит внутренних нулевых байтов (\0), так как %.123s
ограничивает только максимальную длину, а не точную, и строки по-прежнему считаются нуль-терминированными.
Если вы хотите вывести не нуль-терминированную строку с внутренним нулем, вы не можете использовать один printf. Вместо этого используйте fwrite
:
fwrite(string, 1, length, stdout);
Подробное объяснение смотрите в ответе @M.S.Dousti.