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
...全文
265 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧