在QNX中,std :: cout在\ n后不会打印字母

时间:2019-01-29 14:08:17

标签: c++ string qnx

我想打印存储在单个字符串中的项目列表。我不知道为什么最后一个项目被跳过!

您知道为什么吗?

#include <iostream>
#include <string>

int main() {
  std::string string_test{"Item1\nItem2\nItem3"};
  std::cout << string_test;

  return 0;
}

输出为:

Item1
Item2

3 个答案:

答案 0 :(得分:2)

这是QNX版本7.0.3上行缓冲流输出中的一个已报告的错误。

Source

答案 1 :(得分:1)

在POSIX 2017下,不需要使用C ++实现在程序终止 1 时刷新程序的标准输出。你的不是。您需要手动执行此操作:

#include <iostream>
#include <string>

int main()
{
    std::string string_test{"Item1\nItem2\nItem3"};
    std::cout << string_test << std::flush;
}

1)

  

The Open Group Base Specifications Issue 7, 2018 edition

     

按照ISO C标准的要求,使用从main()返回的行为与使用返回值调用exit()的行为(对于语言范围问题除外)具有相同的行为。到达main()函数的末尾与调用exit(0)的行为相同。

     

[...]

     

_Exit()_exit()函数不得调用向atexit()注册的函数或任何已注册的信号处理程序。 [Option Start] (开放选项) [选项结束] 由实现定义是否关闭打开的流(不刷新)。最后,呼叫过程将终止,并产生以下所述的后果。

答案 2 :(得分:1)

如果您可以使用std::cerr而不是std::cout,则在std::cerr上刷新是自动的

#include <iostream>
#include <string>

int main()
{
    std::string string_test{"Item1\nItem2\nItem3"};
    std::cerr << string_test;

    return 0;
}