wchar_t 字符串的长度问题

时间:2021-11-28 20:17:33
RT 
wchar_t wch1[] = {'我' , '是' , '中' , '国' , '人'};
size_t i=wcslen(wch1)=11;
wchar_t wch2[] = {'我' , '是' };
size_t j=wcslen(wch2)=7;

请问下,这是为什么啊? 是如何计算长度的?

10 个解决方案

#1


wcslen() 需要00作为结束符来统计长度。
应该给wch1[]一个完整的字符串,而不是一个个字符。 

#2


wcslen, 得出的不是字符串的长度而是字符的个数.另外你没有加结尾符

#3


wchar_t   wch1[]   =   {'我'   ,   '是'   ,   '中'   ,   '国'   ,   '人'}; 
--
这并不是字符串!只是字符数组.
自然用操作字符串的函数不能得到正确结果
wchar_t   wch1[]   =   "我是中国人"; 

wchar_t   wch1[]   =   {'我'   ,   '是'   ,   '中'   ,   '国'   ,   '人',0}; 

#4



wchar_t   wch1[]   =   {'我'   ,   '是'   ,   '中'   ,   '国'   ,   '人', '\0'}; 
size_t   i=wcslen(wch1);                  //5
wchar_t   wch2[]   =   {'我'   ,   '是','\0'   }; 
size_t   j=wcslen(wch2);              //2

#5


int main()
{
wchar_t ch1[]=L"我是中国人";
wchar_t ch2[]={L'我',L'也',L'是',L'中',L'国',L'人',L'\0'};
wcout.imbue(std::locale("chs"));
wcout<<ch1<<L"\n"<<ch2<<L"\n";
cout<<wcslen(ch1)<<'\t'<<wcslen(ch2)<<'\n';
cout<<"程序结束\n";
return 0;
}

#6


up

#7


没有结尾 \0,长度就不固定了

#8


怎么我的机器上第一个的值是15

#9


5楼好~··

#10



5楼的解释一下吧!
locale国际化的设置貌似非常复杂。
#include <iostream>
#include <locale>
using namespace std;
int main()
{
locale loc("");
cout<<loc.name()<<endl;
}
输出为:Chinese_People's Republic of China.936
请按任意键继续. . .

#1


wcslen() 需要00作为结束符来统计长度。
应该给wch1[]一个完整的字符串,而不是一个个字符。 

#2


wcslen, 得出的不是字符串的长度而是字符的个数.另外你没有加结尾符

#3


wchar_t   wch1[]   =   {'我'   ,   '是'   ,   '中'   ,   '国'   ,   '人'}; 
--
这并不是字符串!只是字符数组.
自然用操作字符串的函数不能得到正确结果
wchar_t   wch1[]   =   "我是中国人"; 

wchar_t   wch1[]   =   {'我'   ,   '是'   ,   '中'   ,   '国'   ,   '人',0}; 

#4



wchar_t   wch1[]   =   {'我'   ,   '是'   ,   '中'   ,   '国'   ,   '人', '\0'}; 
size_t   i=wcslen(wch1);                  //5
wchar_t   wch2[]   =   {'我'   ,   '是','\0'   }; 
size_t   j=wcslen(wch2);              //2

#5


int main()
{
wchar_t ch1[]=L"我是中国人";
wchar_t ch2[]={L'我',L'也',L'是',L'中',L'国',L'人',L'\0'};
wcout.imbue(std::locale("chs"));
wcout<<ch1<<L"\n"<<ch2<<L"\n";
cout<<wcslen(ch1)<<'\t'<<wcslen(ch2)<<'\n';
cout<<"程序结束\n";
return 0;
}

#6


up

#7


没有结尾 \0,长度就不固定了

#8


怎么我的机器上第一个的值是15

#9


5楼好~··

#10



5楼的解释一下吧!
locale国际化的设置貌似非常复杂。
#include <iostream>
#include <locale>
using namespace std;
int main()
{
locale loc("");
cout<<loc.name()<<endl;
}
输出为:Chinese_People's Republic of China.936
请按任意键继续. . .