Страницы

Поиск по вопросам

среда, 21 ноября 2018 г.

Как должен работать %n?

На Хабре говорится
Спецификатор "%n" не учитывает количество символов, выведенных с помощью таких спецификаторов, как "%f". Поэтому, перед "%n" поставим один пробел, чтобы записать в isOkPassword значение 1.
Однако, проверка показывает, что это вовсе не так:
#include
int main(void) { int n;
printf("%f %n
", 12.0, &n); printf("%d", n);
return 0; }

12.000000 10
А как на самом деле должен работать этот код? Вроде %n для того и нужен, чтобы учитывать форматы, ведь иначе в нём не было бы смысла.


Ответ

Спецификатор %n приводит к записи в аргумент-приемник общего количества символов посланных к этому моменту в выходной поток ("...the number of characters written to the output stream so far by this call to fprintf."). Никакого "не учитывания" каких-то спецификаторов формата в нем нет и быть не может.

Комментариев нет:

Отправить комментарий