Предположим, я использую следующее printf()
строка спецификатора:
printf("%.*s", length, str);
который спрашивает printf()
в напечатать первый length
персонажи в str
. Вопрос в том, какой тип length
есть? Я вижу только краткие упоминания целое число в документации.
Так выглядит int
, Тогда похоже, что я не могу использовать следующий код, когда строка очень длинная:
const char* startOfString = ...
const char* middleOfString = ...
printf("%.*s", (int)( middleOfString - startOfString ), startOfString);
Похоже, я не могу вывести больше, чем INT_MAX
символы таким образом.
Так какой тип точность? Это int
либо это size_t
или что-нибудь еще?
Это int
, и вы не можете напечатать больше, чем INT_MAX
символы таким образом.
Из стандарта C, § 7.21.6.1, абз. 5:
ширина поля, или точность, или и то, и другое могут быть обозначены звездочкой. В
этот случайint
Аргумент предоставляет ширину поля или точность.