将 Stdout/Stderr 重定向到字符串
虽然将 stdout/stderr 重定向到文件是一种常见的做法,但在某些情况下捕获作为字符串输出更合适。在本文中,我们将探讨如何使用标准 C 库来实现此目的。
使用 Stringstream
一种方法是利用 std::stringstream 类。通过将 stdout/stderr 重定向到 stringstream 对象,您可以将输出捕获为字符串。下面是一个示例:
<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>
此代码首先创建一个字符串流并将其缓冲区分配给 cout。 cout 的任何后续输出都将被 stringstream 捕获。重定向完成后,您可以使用 stringstream 的 str() 方法访问捕获的文本。
使用 Guard 类
以确保缓冲区始终正确重置,您可以创建一个守卫类。下面是一个示例:
<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>
cout_redirect 类允许您在其范围内临时重定向 stdout/stderr。当创建此类的对象时,旧的缓冲区将被存储。一旦它被破坏,旧的缓冲区就会被恢复。
通过利用这些技术,您可以轻松地将 stdout/stderr 的输出捕获为字符串,从而在 C 应用程序中管理输出方面提供灵活性。
以上是如何在 C 中将 Stdout/Stderr 输出捕获为字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!