c++ - fprintf()/std::cout 不会将字符串的一部分打印到 stdout/stderr

标签 c++ c printing console stdout

我对 stdout 有这个奇怪的问题/stderr .

我想为无法将原始代码放在这里而道歉,它太长/依赖的库太多等等...
因此,如果您遇到过类似的事情,或者在没有获得原始代码的情况下可能导致此问题的原因,请告诉我,只有我尝试做的简单事情的想法和示例:

  • 我正在使用 g++ (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)RHEL 6.3
  • 我无法将它放在这里隔离问题,我将给出我所做的代码示例。
  • fprintf() / printf() / std::cout一段时间后停止工作。 我正在使用 boost::asio::io_servicedeadline_timer为了调用my_print()功能。
    my_print()函数每隔 1 second 打印到屏幕一些信息。

为了打印,我使用对齐方式,如下所示:

fprintf(stdout, "%*s\n", -printWidth, someEnumToStr[i]);
fprintf(stdout, "%s\n", aString);
fprintf(stdout, "%u\n", num);

同时 aStringstd::string .有时我构造 aString来自 std::ostringstream .
有时我用 snprintf() 构造它.

  • 我有一个 std::map有了信息, map 中正好有 16 个元素。我遍历它,对于每个元素,我尝试使用 fprintf() 的示例打印数据以上。
  • 由于未知原因,元素行 16未打印。
  • 如果我调用可执行文件,并重定向 stdout到文件 ( ./a.out > aaa.txt ) 元素行 16正在打印。
  • 如果我打开一个新的FILE*fprintf()对于这个文件,再次打印所有内容(所有行,包括元素 16 的行)
  • 使用前fprintf()我尝试使用 std::cout (和对齐 std::cout.width(printWidth) << std::left ...),同样的行为发生了,但是当行 16没有画,stdout卡住了(我的意思是,该程序仍然有效,但没有任何内容打印到 stdout 再也没有。我不得不调用 std::cout.clear() 让它再次工作)。由于代码中的一点,我无法掌握,std::cout.failbitbadbit1 .
  • 如果我用 valgrind 运行代码这种行为不会发生。 valgrind没有说错什么。
  • 如果我用 gdb 运行它它发生了,但是gdb没有说错什么。
  • 如果我在 IDE ( clion) 中以 Debug模式运行它,它不会发生。
  • 如果我在 IDE 中运行它而不进行调试,它就会发生。
  • 我认为这取决于 printWidth我给出了 fprintf() 中的对齐方式- 当 printWidth越大,发生得越快(当它越小时,16 行会随机打印)。
  • 另一件重要的事情:当有更多要打印时,它会更频繁地发生。
  • 我试着给std::cout一个更大的缓冲区(不是他的默认值)但它没有用。
  • 我试图将所有输出缓冲到缓冲区中(而不是打印每一行),然后只缓冲到 fprintf()一次。发生相同的行为。
  • 我在尝试打印 NULL 的代码中没有找到任何地方指针。
  • 我用 \n 打印每对fprintf()s ,然后做 fflush()my_print()结束

如果你知道什么请告诉我。


插图:

deadline_timer..... every 1 sec... my_print()
boost::asio::io_service.run

my_print() {

    for(std::map<>::iterator... begin, end, ++it....) {
        fprintf()s....
    }
}

最佳答案

不可打印的字符可能会破坏终端。

fprintf(stdout,"%s", astdstring.cstr());

就是如何打印std::string

关于c++ - fprintf()/std::cout 不会将字符串的一部分打印到 stdout/stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508801/

相关文章:

c++ - 在父类(super class)构造函数中引用时调用哪个公共(public)函数?

c++ - Visual Studio 6 何时捕获结构化异常?

c++ - 在 Windows 上打印不工作

在多线程程序中捕获 SIGINT

c - 一个数组在另一个数组中

css - 打印样式表 - Webkit 与 Gecko/IE 中的打印页面宽度不同

javascript - 使用 pdf.js 打印 PDF

c++ - WebServices 的跨平台开源第三方库

带有 "this"关键字的 Java 复制构造函数

c - 如何将 ws2_32.lib 与 autotools 链接