2013-09-28 3 views
0

매초마다 stdout에 필요한 출력을 인쇄하는 Linux (Ubuntu 12.04) 플랫폼의 C++ 프로그램을 작성했습니다. 즉, 10 초 후, 나는 stdout에 100 라인 (매초마다 2 라인의보고입니다)을 가지고 있음을 의미합니다.문자열 변수에 stdout 쓰기

이것은 내 적용된 시뮬레이션 형식이며 어떤 변수 나 방법을 변경하여 stdout 대신 변수에 출력을 쓸 수 없습니다.

이 출력을 stdout 대신 string 변수에 저장하겠습니다. C++ 언어로 어떻게 가능합니까?

+0

"stdout"이라고 말하면'printf()'또는'fprintf (stdout, ...)'을 의미합니까? 이 경우 나는 해결책이 있다고 생각하지 않는다. 'std :: cout'을 의미하는 경우 해결책이 있습니다. –

답변

1

문자열 스트림을 사용할 수 있습니다. 가정 원래 로깅 기능은 다음과 같이이다 :

std::streambuf * sbuf = std::cout.rdbuf(); // save original 

std::ostringstream oss; 
std::cout.rdbuf(oss.rdbuf());    // redirect to "oss" 

// ... 

std::cout.rdbuf(sbuf);      // restore original 
: 즉, 전역 std::cout의 출력 버퍼를 난도질 할 수있는 옵션이 아니라면

#include <sstream> 

int main() 
{ 
    std::ostringstream oss; 

    // ... 
    log(oss, "Ping"); 
} 

님의

void log(std::ostream & o, std::string msg) 
{ 
    o << msg << std::endl; 
} 

int main() 
{ 
    // ... 
    log(std::cout, "Ping"); 
} 

변경이

두 경우 모두 oss.str()에는 문자열 데이터가 들어 있습니다.

+0

기본 프로그램으로 stdout 인쇄를 묶고 stdout에서 내 형식으로 내 자신의 문자열 변수 (oss.str())를 인쇄 할 수 있습니까? – BlueBit

+0

@BlueBit : 죄송합니다. 질문을 이해할 수 없습니다. 무엇을 포맷하고 싶습니까? –

+0

내 프로그램의 기본 표준 출력을 인쇄하고 싶지는 않습니다. 그냥 stdout을 문자열 변수에 복사하십시오. 어떻게하면 표준 출력을 할 수 있습니까? 알았어, 친구? :-) – BlueBit