将字符串转换为char*失败(codecvt)



我有以下代码:

std::wstring my_string = L"foo";
std::wstring_convert<std::codecvt_utf8<wchar_t> > my_conv;
const char *chars = my_conv.to_bytes( my_string ).c_str();

转换返回一个空指针(不是NULL,只是""(。

to_bytes是否返回临时指针?如何正确编写此代码?

std::wstring_convert::to_bytes()不返回临时指针。它返回一个临时std::string对象。您正在保存一个指向临时对象数据的指针,然后临时对象超出范围并在之后被销毁,留下一个指向无效内存的悬空指针

保存std::string本身,而不是指向其数据的char*指针,例如:

std::wstring my_string = L"foo";
std::wstring_convert<std::codecvt_utf8<wchar_t> > my_conv;
std::string chars = my_conv.to_bytes( my_string );
// now use chars.c_str() when needed...

最新更新