我运行了相同的代码来确定宽字符串中的字符数。测试的字符串有ascii、数字和韩语。
#include <iostream>
using namespace std;
template <class T,class trait>
void DumpCharacters(T& a)
{
size_t length = a.size();
for(size_t i=0;i<length;i++)
{
trait n = a[i];
cout<<i<<" => "<<n<<endl;
}
cout<<endl;
}
int main(int argc, char* argv[])
{
wstring u = L"123abc가1나1다";
wcout<<u<<endl;
DumpCharacters<wstring,wchar_t>(u);
string s = "123abc가1나1다";
cout<<s<<endl;
DumpCharacters<string,char>(s);
return 0;
}
显而易见的是,Visual C++ 2010 中的 wstring.size() 返回字母的数量(11 个字符),无论它是 ascii 还是国际字符。但是,它返回 Mac OS X 中 XCode 4.2 中字符串数据的字节数(17 个字节)。
请回复我如何获取宽字符串的字符长度,而不是 xcode 中的字节数。
--- 2 月 12 日添加 --
我发现 wcslen() 在 xcode 中也返回 17。它在 vc++ 中返回 11。这是经过测试的代码:
const wchar_t *p = L"123abc가1나1다";
size_t plen = wcslen(p);
--- 添加于 2 月 18 日 --
我发现 llvm 3.0 导致长度错误。将编译器前端从 llvm3.0 更改为 4.2 后,此问题已修复