Страницы

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

суббота, 11 апреля 2020 г.

Странное поведение оператора >>

#cpp #json

                    
Решил попробовать в работе библиотеку JsonCpp, написал простенькую программу: 

#include 
#include 
int main() {
    Json::Value val;
    std::cin >> val["foo"]; //вот здесь странно себя ведет.
    std::cout << val;
}


Но после компиляции и запуска программа не доходит до вывода root, а бесконечно дает
вводить текст. Очевидно, проблема в строке std::cin >> val["foo"], но строка взята
из примера в документации, и там та же проблема. Даже не могу представить, в чем может
быть проблема. Здесь в самом низу (последняя функция) можно увидеть реализацию этого
самого operator>>.
    


Ответы

Ответ 1



Дело вот в этой строке в библиотеке: ssin << sin.rdbuf(); Это яд: она пытается скопировать весь файл целиком, поэтому чтобы закончить ввод, вы должны скормить терминалу EOF (^D на никсах, ^Z на Windows). Короче говоря, не используйте эту функцию, а еще лучше не используйте эту библиотеку - rapidjson, например, не страдает от таких дефектов.

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

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