строка формата, используемая в функции printf в C-программировании - PullRequest
0 голосов
/ 03 октября 2019

В этом коде:

sprint(buf_ptr, "%.*s", MAX_BUF_LEN, desc);

что означает "%.*s",? что означает "%20.20s" и "%.28s" - в snprintf?

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

В спецификации формата %*s, s указывает, что аргумент будет символьной строкой с нулевым символом в конце, а * (спецификатор ширины) говорит, что в качестве аргумента указана ширина поля непосредственно перед строкой.

В других ваших примерах спецификатор (ы) ширины задан как фиксированные значения.

На самом деле, впредоставленные вами форматы printf, есть и ширина и точность спецификаторы: ширина являетсязначение до периода и точность после. Для строк ширина - это минимальный размер выходного поля (если необходимо, пробел дополняется), а точность - это максимальное количество символов для печати (при необходимости строка будет обрезана). В любом случае, если для любого из них указан *, предполагается, что он находится в списке аргументов (как целое число) непосредственно перед строкой, к которой он применяется.

0 голосов
/ 03 октября 2019

что означает "%. * S"?

desc, ниже, является символьным указателем , который не обязательно должен указывать на строку 1 . Печать будет продолжаться до тех пор, пока не будут напечатаны MAX_BUF_LEN чартеры ( точность ) или пока не будет прочитан нулевой символ - что произойдет раньше.

sprint(buf_ptr, "%.*s", MAX_BUF_LEN, desc);

что означает "% 20.20s" ... в snprintf?

Давайте для ясности используем два разных значения: "%19.21s".

desc - это символьный указатель , который не обязательно должен быть строкой. Печать будет продолжаться до тех пор, пока не будут напечатаны 21 чартеры или пока не будет прочитан нулевой символ - который всегда будет первым. Если количество печатаемых чартеров меньше 19 ( минимальная ширина ), заполните поле слева пробелами, чтобы их общее количество составило не менее 19 символов.

sprint(buf_ptr, "%19.21s", desc);

что означает ... "% .28s" в snprintf?

Точно так же, как sprint(buf_ptr, "%.*s", 28, desc);


В общем, подумайте о "%minimum.maximum s"


1 A string - это непрерывная последовательность символов, оканчивающаяся и включающая первый нулевой символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...