На Хабре говорится
Спецификатор "%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."). Никакого "не учитывания" каких-то спецификаторов формата в нем нет и быть не может.
Комментариев нет:
Отправить комментарий