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
...全文
383 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
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 ### HSMS/SEMI通讯E37说明书中文关键知识点 #### 一、HSMS概述 - **HSMS**(High-Speed SECS Message Service)是一种专为半导体工厂内部计算机之间进行高速消息传输而构建的通信标准。该标准旨在逐步取代原有的SEMIE4(SECS-I)和SEMIE13(SECS Message Service),特别是在需要高速数据交换或简单的点对点拓扑结构无法满足实际需求的情况下。 - HSMS的核心宗旨在于提供一种机制,使来自不同制造商的设备能够达成无缝对接和互操作状态,即便这些设备在设计理念和通信机制上存在显著差异。 - HSMS不仅适用于TCP/IP优先于OSI模型的应用环境,同时也能作为SEMIE4和SEMIE13的有效替代方案。 #### 二、HSMS的应用范围 - HSMS主要部署于半导体制造业中的计算机系统之间进行消息交换的场景,如自动化生产线、设备监控系统等。 - 该标准界定了通信接口,使得半导体工厂内的各类设备能够实现高效且可靠的数据传输。 #### 三、HSMS与其他标准的关系 - **SEMIE4 (SECS-I)**:规定了消息传输的基本规则和格式。 - **SEMIE5 (SECS-II)**:明确了消息的具体内容和结构。 - **IETF Documents**: - RFC791 - Internet协议 - RFC792 - Internet控制消息协议 - RFC793 - 传输控制协议 - RFC1120 - Internet主机通信层的要求 - RFC1340 - 指定号码 - **POSIX D...

65,210

社区成员

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

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