mbrlen()无法返回。
示例:
#include <locale>
#include <wchar.h>
int main() {
std::wstring TestString;
std::setlocale(LC_ALL, "");
mbstate_t mbs;
size_t Res = mbrlen(NULL, 0, &mbs); //Initialize mbs
return 0;
}
编译:
g++ -I/usr/include -std=c++0x -L/usr/lib64 -L/usr/local/lib test.cpp
不返回,但是删除std :: wstring声明可以解决问题,所以返回正常:
#include <locale>
#include <wchar.h>
int main() {
//std::wstring TestString;
std::setlocale(LC_ALL, "");
mbstate_t mbs;
size_t Res = mbrlen(NULL, 0, &mbs); //Initialize mbs
return 0;
}
或者删除setlocale()
(同时保留声明)也可以正常工作。
fedora 20,g ++ 4.8.3 20140624
答案 0 :(得分:3)
在尝试使用之前,您应该将mbs
归零。
#include <cstring>
memset(&mbs, 0, sizeof(mbs));
或初始化它(更像C ++):
mbstate_t mbs{};