Каков тип спецификатора точности для printf?

Предположим, я использую следующую строку спецификатора 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 или что-то еще?


person sharptooth    schedule 30.03.2015    source источник
comment
Если под документацией вы имеете в виду cplusplus.com, я предлагаю вам найти лучший источник документации по умолчанию. Я бы начал с man-страницы (man fprintf) в unix-подобной системе (следующий аргумент... который должен быть типа int). Если вы работаете в Windows, вы можете прочитать справочные страницы в Интернете. . Также есть en.cppreference.com/w/c/io/fprintf . (точность задается дополнительным аргументом типа int)   -  person rici    schedule 30.03.2015


Ответы (1)


Это int, и таким образом нельзя напечатать более INT_MAX символов.

Из стандарта C, 7.21.6.1, параграф. 5:

ширина поля или точность, или и то и другое, могут быть обозначены звездочкой. В этом случае аргумент int предоставляет ширину или точность поля.

person rici    schedule 30.03.2015