Попытка прочитать содержимое из strstream вызывает нарушение доступа

#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’. Похоже, это устранило проблему. 🙂