printf、wprintf、std::cout和std::wcout在Linux命令行的输出问题

弟十六 2015-08-25 12:22:58
printf和wprintf好像是互斥的,谁第一个输出过一次,另一个调用就无法正确输出。例如:
printf( "string. \n" );
wprintf( L"wstring. \n" );
结果输出的是:string. 如果调整先后顺序:
wprintf( L"wstring. \n" );
printf( "string. \n" );
结果输出的就是:wstring.
std::cout和std::wcout有点不同,就是如果std::cout在std::wcout在之前调用,那么都可以正确输出,而如果先调用std::wcout输出,那么该进程之后调用的std::cout都无法输出。例如:
std::cout << "string. \n";
std::wcout << L"wstring. \n";
结果输出:
string.
wstring.
而如果这样:
std::wcout << L"wstring. \n";
std::cout << "string. \n";
输出就只有:
wstring.
以上情况在Windows上无论是VS还是MinGW都没有这个问题,这是为什么呢?
我的测试环境是:CentOS 6.5、GCC 5.2
...全文
198 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ri_aje 2015-08-25
narrow (printf,cout)和 wide (wprintf,wcout) 的输出不能混用,c++ 标准说混用的具体行为参见 c 标准,c 标准说混用导致未定义行为。看看这些帖子: http://stackoverflow.com/questions/26410497/why-does-cout-work-but-wcout-not http://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program http://stackoverflow.com/questions/8681623/printf-and-wprintf-in-single-c-code
  • 打赏
  • 举报
回复
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2015-08-25 12:22
社区公告
暂无公告