Неправильный синтаксис - PullRequest
3 голосов
/ 24 марта 2011

Я читал книгу и наткнулся на программу для чтения записей из файла /proc.Программа, которую они упомянули, имеет следующую строку

printf("%.*s", (int) n, line);

Мне не ясно, что означает строка выше

  1. , какой тип печати, если выше "%.*s используется вместо %s

Код можно прочитать здесь

Ответы [ 2 ]

6 голосов
/ 24 марта 2011

Аннотация из здесь :

. * - Точность не указана в строке формата, но является дополнительным целочисленным аргументом, предшествующим аргументу, который должен быть отформатирован.

Таким образом, это печатает до n символов из строки строки.

0 голосов
/ 24 марта 2011

Приведенное выражение (int) n преобразует значение n в тип int. Это потому, что спецификатор форматирования требует простого int, и я предполагаю (поскольку вы его не включили) переменная n имеет другой тип.

Поскольку другой тип, такой как size_t, может иметь другой размер, это создаст проблемы с передачей аргумента printf(), если он не был явно преобразован в int.

...