Страницы

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

понедельник, 23 декабря 2019 г.

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

#cpp #c #language_lawyer


На Хабре говорится:


  Спецификатор "%n" не учитывает количество символов, выведенных с помощью таких
спецификаторов, как "%f". Поэтому, перед "%n" поставим один пробел, чтобы записать
в isOkPassword значение 1. 


Однако, проверка показывает, что это вовсе не так:

#include 

int main(void)
{
    int n;

    printf("%f %n\n", 12.0, &n);
    printf("%d", n);

    return 0;
}




12.000000 
10


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


Ответы

Ответ 1



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

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

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