我发现当源是wchar_t数组时,wcslen()返回gcc的不正确结果(在msvc上正确),它是packed的成员。我知道在linux (Wchar_t) == 4和windows 2上,但仍然无法理解打包如何影响wcslen()函数。如果我将wchar_t/wcslen更改为char/strlen,它将按预期工作。pragma pack(pop)
{ B b{};
m
wchar_t* clean(wchar_t out[], const wchar_t in[]) int n = wcslen(in); if (wcslen(word) > 1) { wcscat(out, L" "不幸的是,程序落在这个函数的最后几行,出现了同样的错误(linux-3.7,gcc-4.7):
*** E
strConfigUrl" << strConfigUrl << "\n";
wcstombs( buffer, strConfigUrl, wcslen(strConfigUrl) ); // Need wcslen to compute the length of the string
// convert it to string
我的问题是,函数mbstowcs返回的长度是正确的,但是wcslen函数在新创建的wchar_t字符串上返回的长度是不正确的。我是不是漏掉了什么?C string %s converted to wchar string %ls\n",str,obj->string); //obj->string is of a wcslen size larger= wcslen(obj->string))
printf("Length failure!but wc