一个 wstring 的问题

时间:2022-12-12 12:38:55
请看下面的代码:



#include <string>
using namespace std;

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

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

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

请问这是为什么?

7 个解决方案

#1



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

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


输出:

hello world!

#2


英文问题不大,主要是中文。
设置输出环境,设置本地字符集。

#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;
}

#3


你那个方法,应该打印开头就碰到' \0' 了

#4


引用 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直接认为是 结束了。

#5


引用 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;
}


谢谢指点

#6


引用 3 楼 ylongwu 的回复:
你那个方法,应该打印开头就碰到' \0' 了


为何是一开始就会遇到 0 呢

两个字节代表一个宽字符时,也是0在第二个字节

#7


这是国际化的问题,你也可以这样设置:
wcout.imbue(locale("chs"));

#1



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

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


输出:

hello world!

#2


英文问题不大,主要是中文。
设置输出环境,设置本地字符集。

#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;
}

#3


你那个方法,应该打印开头就碰到' \0' 了

#4


引用 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直接认为是 结束了。

#5


引用 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;
}


谢谢指点

#6


引用 3 楼 ylongwu 的回复:
你那个方法,应该打印开头就碰到' \0' 了


为何是一开始就会遇到 0 呢

两个字节代表一个宽字符时,也是0在第二个字节

#7


这是国际化的问题,你也可以这样设置:
wcout.imbue(locale("chs"));