#strstream
#strstream
Вопрос:
Я пытаюсь прочитать содержимое ostrstream с помощью str (). При попытке сделать это я всегда сталкиваюсь с нарушениями доступа и сбоями моего приложения. Есть ли способ чтения из strstream, не вызывая ошибок потока?
Я работаю над устаревшим проектом, построенным на Borland C . В настоящее время я использую Borland C v5.02 для создания своего проекта. Поскольку код огромен и разбросан по большому количеству файлов, я не могу вставить код сюда. Тем не менее, я попытаюсь выделить свой вариант использования.
ps — это поток, который используется во всем проекте для печати квитанций. Мне нужно получить данные о получении из этого strstream, не нарушая код.
строка str = ps.pStr->str ();
ps.Pstr->rdbuf ()->freeze (0);
ps << EndJob;
Последняя строка вызывает нарушение доступа
Комментарии:
1. Пример решения: your_stream << std::ends; your_stream.str(); // используя результат здесь your_stream.freeze(false);
2. Спасибо, Дефтер. Однако у меня возник дополнительный вопрос. Что мне на самом деле нужно сделать, это прочитать из strstream, получить данные и оставить поток в состоянии, в котором его можно использовать снова. Я попробовал команду rdbuf ()-> freeze (0), но после извлечения данных поток не может быть использован.
3. Пожалуйста, добавьте пример кода в свой вопрос, может быть, есть еще какие-то проблемы
Ответ №1:
Вы пропустили set null в конце буфера.
Before any call to str() that uses the result as a C string, the buffer must be null-terminated, typically with std::ends.
Комментарии:
1. Большое спасибо Defter. Я не смог использовать std::ends, поэтому я просто вставил нулевой символ ‘/ 0’. Похоже, это устранило проблему. 🙂