У меня есть фрагмент кода, в котором есть
printf("%.*s\n")
что %.*s
значит?
c
printf
format-specifiers
Шаобо Ван
источник
источник
printf
призыв.Ответы:
Вы можете использовать звездочку (
*
) для передачи спецификатора / точности шириныprintf()
вместо жесткого кодирования в строку формата, т.е.источник
str_len
аргумент должен иметь типint
(или более узкий целочисленный тип, который будет повышен доint
). Было бы ошибкой пройтиlong
,size_t
и т.д.%s
, - напечатать подстроку исходной строки. В этом случае использованияstr
будет указывать где-то внутри исходной строки (возможно, в начале) иstr_len
указать длину подстроки, которая должна быть напечатана.Подробнее здесь .
Итак, если мы попробуем обе спецификации преобразования
получаем вывод:
источник
Я не думаю, что приведенный выше код верен, но (согласно этому описанию
printf()
).*
средстваТак что это строка с допустимой шириной в качестве аргумента.
источник
int
(или его подмножеством), а не просто любым целым значением, например более интуитивнымsize_t
или его возможными псевдонимами, напримерstd::string::size_type
. Это еще больше сбивает с толку, если учесть, что на указанной странице упоминаетсяsize_t
один из описателей поддерживаемого типа.См .: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
источник