一个 wstring 的问题

u0116snail 2014-07-27 09:20:58
请看下面的代码:



#include <string>
using namespace std;

int main()
{
wstring s(L"我们的");
wcout<<s<<endl;
return 0;
}

为什么没有任何输出结果?预想应该输出 “ 我们的” 这三个汉字的,为什么没有输出??

另外
wstring s(6, L'我');
wcout<<s<<endl;
也打印不出任何文字

请问这是为什么?
...全文
174 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
passion_wu128 2014-08-06
  • 打赏
  • 举报
回复
这是国际化的问题,你也可以这样设置: wcout.imbue(locale("chs"));
u0116snail 2014-08-06
  • 打赏
  • 举报
回复
引用 3 楼 ylongwu 的回复:
你那个方法,应该打印开头就碰到' \0' 了
为何是一开始就会遇到 0 呢 两个字节代表一个宽字符时,也是0在第二个字节
u0116snail 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 zjq9931 的回复:
英文问题不大,主要是中文。 设置输出环境,设置本地字符集。

#include <iostream>
#include <locale>
using namespace std;
int main(void)
{
	/************************************************************************/
	/* 第一种方式                                                           */
	/************************************************************************/
	//locale loc("chs");
	//wcout.imbue(loc);

	/************************************************************************/
	/* 第二种方式                                                           */
	/************************************************************************/
	setlocale(LC_ALL,"chs"); /* 简体中文,另外有几种等价的方式 */
	wcout << L"中国" << endl;  
	return 0;
}
谢谢指点
u0116snail 2014-08-06
  • 打赏
  • 举报
回复
引用 1 楼 lisong694767315 的回复:

#include <string>
#include <iostream>
using namespace std;

int main()
{
  wstring  s(L"hello world!");
  wcout<<s<<endl;
  return 0;
}
输出:

hello world!
应该会输出 hello 因为空格的话,cout直接认为是 结束了。
  • 打赏
  • 举报
回复
英文问题不大,主要是中文。 设置输出环境,设置本地字符集。

#include <iostream>
#include <locale>
using namespace std;
int main(void)
{
	/************************************************************************/
	/* 第一种方式                                                           */
	/************************************************************************/
	//locale loc("chs");
	//wcout.imbue(loc);

	/************************************************************************/
	/* 第二种方式                                                           */
	/************************************************************************/
	setlocale(LC_ALL,"chs"); /* 简体中文,另外有几种等价的方式 */
	wcout << L"中国" << endl;  
	return 0;
}
ylongwu 2014-07-28
  • 打赏
  • 举报
回复
你那个方法,应该打印开头就碰到' \0' 了
神奕 2014-07-27
  • 打赏
  • 举报
回复

#include <string>
#include <iostream>
using namespace std;

int main()
{
  wstring  s(L"hello world!");
  wcout<<s<<endl;
  return 0;
}
输出:

hello world!

64,281

社区成员

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

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