我有以下代码:
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...