>  기사  >  백엔드 개발  >  C의 문자열에서 표준 출력 및 오류 스트림을 캡처하는 방법은 무엇입니까?

C의 문자열에서 표준 출력 및 오류 스트림을 캡처하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 01:24:30235검색

How to Capture Standard Output and Error Streams in a String in C  ?

C에서 출력을 문자열로 리디렉션하는 방법

다양한 디버깅 및 테스트 시나리오의 경우 표준 출력을 리디렉션하고 오류는 콘솔이 아닌 문자열로 스트리밍됩니다.

해결책: std::stringstream 사용

stdout/stderr을 문자열로 리디렉션하려면 std ::stringstream class:

<code class="cpp">std::stringstream buffer;
std::streambuf *old = std::cout.rdbuf(buffer.rdbuf());

std::cout << "Bla" << std::endl;

std::string text = buffer.str(); // text will now contain "Bla\n"</code>

버퍼 재설정을 위한 가드 클래스

리디렉션 후 버퍼가 재설정되도록 하려면 가드 클래스를 생성할 수 있습니다.

<code class="cpp">struct cout_redirect {
    cout_redirect(std::streambuf *new_buffer) : old(std::cout.rdbuf(new_buffer)) {}

    ~cout_redirect() { std::cout.rdbuf(old); }

private:
    std::streambuf *old;
};</code>

이 가드 클래스는 예외가 발생하더라도 버퍼가 항상 원래 상태로 복원되도록 보장합니다.

위 내용은 C의 문자열에서 표준 출력 및 오류 스트림을 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.