2016-10-07 2 views
0

str()을 사용하여 ostrstream의 내용을 읽으려고합니다. 그렇게하려고 시도하는 동안 나는 항상 액세스 위반과 응용 프로그램 충돌을 경험합니다. 거기에 스트림 오류가 발생하지 않고 strstream에서 읽을 수있는 방법이 있나요?strstream에서 내용을 읽으려고하면 액세스 위반이 발생합니다.

저는 Borland C++로 작성된 레거시 프로젝트를 작업 중입니다. 현재 Borland C++ v5.02를 사용하여 프로젝트를 구축하고 있습니다. 코드가 방대하고 많은 수의 파일에 분산되어 있으므로 여기에 코드를 붙여 넣을 수 없습니다. 그러나 유스 케이스를 강조하려고합니다.

ps는 영수증을 인쇄하는 데 프로젝트 전체에서 사용되는 스트림입니다. 코드를 깨지 않고이 strstream에서 영수증 데이터를 가져와야합니다.

문자열 str = ps.pStr-> str();

ps.Pstr-> rdbuf() -> freeze (0);

ps < < EndJob;

마지막 줄로 인해 액세스 위반이 발생합니다.

+0

예제 솔루션 : your_stream << std :: ends; your_stream.str(); // 여기서 결과 사용 your_stream.freeze (false); – Defter

+0

Defter 감사합니다. 나는 추가적인 질문이 있었다. 실제로해야 할 일은 strstream에서 읽은 다음 데이터를 가져 와서 스트림을 다시 사용할 수있는 상태로 두는 것입니다. rdbuf() -> freeze (0) 명령을 시도했지만 데이터를 추출한 후 스트림을 사용할 수 없습니다. – rioCoder

+0

질문에 샘플 코드를 추가하십시오 아마도 더 많은 probem – Defter

답변

0

버퍼 끝에 null이 설정되지 않았습니다.

Before any call to str() that uses the result as a C string, the buffer must be null-terminated, typically with std::ends. 
+0

덕분에 많은 Defter. 나는 std :: ends를 사용할 수 없었기 때문에 그냥 null 문자 '/ 0'을 삽입했다. 이 문제가 해결 된 것 같습니다. :) – rioCoder

관련 문제