[英]fprintf() / std::cout doesn't print part of the string to stdout/stderr
[英]std::cout doesn't print letters after \n in QNX
我想打印存儲在單個字符串中的項目列表。 我不知道為什么最后一個項目被跳過!
你知道為什么嗎?
#include <iostream>
#include <string>
int main() {
std::string string_test{"Item1\nItem2\nItem3"};
std::cout << string_test;
return 0;
}
輸出為:
Item1
Item2
在QNX版本7.0.3上,這是報告的行緩沖流輸出中的錯誤。
下POSIX 2017,C ++實現不要求在程序終止1以沖洗程序的標准輸出。 你的不是。 您需要手動執行以下操作:
#include <iostream>
#include <string>
int main()
{
std::string string_test{"Item1\nItem2\nItem3"};
std::cout << string_test << std::flush;
}
1)
Open Group基本規范第7期,2018年版
根據ISO C標准的要求,使用
main()
return具有與使用返回的值調用exit()
相同的行為(關於語言范圍問題除外exit()
。 到達main()
函數的末尾與調用exit(0)
具有相同的行為。[...]
_Exit()
和_exit()
函數不得調用在atexit()
或任何已注冊信號處理程序中注冊的函數。 [選項開始]不得沖洗打開的流。 [選項結束]是否關閉打開的流(不刷新)是實現定義的。 最后,呼叫過程將終止,並產生以下所述的后果。
如果你能使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.