【发布时间】:2018-12-21 03:39:24
【问题描述】:
我有一个函数来获取std::string 并将其更改为wchar_t*。我现在的加宽函数是这样的
wchar_t* widen(const std::string& str){
wchar_t * dest = new wchar_t[str.size()+1];
char * temp = new char[str.size()];
for(int i=0;i<str.size();i++)
dest[i] = str[i];
dest[str.size()] = '\0';
return dest;
}
这适用于标准字符,但是(我不敢相信这在以前不是问题)当我有 á、é、í、ó、ú、ñ 或 ü 之类的字符时,它会中断并且结果大不相同。
例如:我的str 输入为"Database Function: áFákéFúnctíóñü"
但是dest 最终会变成:"Database Function: £F£k←Fnct■"
如何在保持国际字符的同时从std::string 更改为wchar_t*?
【问题讨论】:
-
请注意您的代码:在大多数情况下,当您使用手动内存管理(即不使用智能指针)或使用矢量
new时,您做错了.在此处使用标准容器(向量、字符串、wstring)。 -
@UlrichEckhardt,感谢您的说明。这个特殊的项目在大多数地方都在 10 到 14 岁之间,我有幸在过去一年左右的时间里涉足它,更不幸的是,由于向后兼容的必要性,我无法修复旧的东西坏了