Как я печатаю строку non-null-terminated с помощью printf?

Как я могу распечатать строку non-null-terminated с помощью printf, предположив, что я знаю длину строки во времени выполнения?

60
задан Georg Fritzsche 22 May 2010 в 20:51
поделиться

1 ответ

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.

102
ответ дан 24 November 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: