Страницы

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

пятница, 5 июля 2019 г.

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

Решил попробовать в работе библиотеку JsonCpp, написал простенькую программу:
#include #include int main() { Json::Value val; std::cin >> val["foo"]; //вот здесь странно себя ведет. std::cout << val; }
Но после компиляции и запуска программа не доходит до вывода root, а бесконечно дает вводить текст. Очевидно, проблема в строке std::cin >> val["foo"], но строка взята из примера в документации, и там та же проблема. Даже не могу представить, в чем может быть проблема. Здесь в самом низу (последняя функция) можно увидеть реализацию этого самого operator>>


Ответ

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

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

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