memcpy只复制wchar_t数组的前半部分

时间:2014-06-10 23:03:30

标签: c++ locale memcpy wchar-t

当我尝试在wchar_t字符串上使用memcpy时遇到错误。具体来说,尽管我发送到memcpy的长度对于我想要复制的字符串的长度是正确的,但只复制了字符串中字符的前半部分。这使我在目标字符串中留下了错误的数据,因为字符串的后半部分充满了从字符串中新出现的垃圾字符。

下面的屏幕截图显示了我正在处理的确切问题:

screenshot of code with watches showing the values I get when my code runs 我唯一能想到的是,这可能与某些方面有关,我将我的语言环境设置为日语用于非Unicode应用程序,但我做的第一件事是将语言环境更改回英语,问题仍然相同。我觉得我错过了一个非常明显的解决方案。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

  • memcpy需要多个字节,而不是多个对象
  • 使用memcpy代替wcslen(src) + 1,而wcscpy
  • 取代new wchar_t[]而不是std::wstring

如果您已将m_pTextures设为vector std::wstring,那么您的代码将变得更加简单,并且不会出现此类错误。

答案 1 :(得分:2)

正如其他人已经指出的那样,memcpy复制字节,而wchar_t不止一个字节。无论如何,为什么不使用一些现有功能呢?看看wcscpy和wchar_t的所有函数。开始here