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
...全文
102 点赞 收藏 1
写回复
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
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告