【问题标题】:memcpy only copies first half of wchar_t array [closed]memcpy 仅复制 wchar_t 数组的前半部分 [关闭]
【发布时间】:2014-07-31 21:08:08
【问题描述】:

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

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

我唯一能想到的是,这可能与我将非 Unicode 应用程序的语言环境设置为日语有关,但我做的第一件事是将语言环境更改回英语,问题仍然存在。我觉得我缺少一个非常明显的解决方案。有什么想法吗?

【问题讨论】:

  • memcpy 复制字节使用sizeof()。
  • 为什么不阅读memcpy的文档而不是猜测?
  • 屏幕截图远不如以文本形式复制和粘贴代码有用。

标签: c++ locale memcpy wchar-t


【解决方案1】:
  • memcpy 占用多个字节,而不是多个对象
  • 而不是memcpy 使用wcslen(src) + 1,有wcscpy
  • 不是new wchar_t[],而是std::wstring。

如果您将 m_pTextures 设置为 vector 或 std::wstring,那么您的代码会简单得多,并且不容易出现此类错误。

【讨论】:

  • 感谢您的指导!老实说,我对 C++ 很陌生,所以知道如何让我的代码更简单、更不容易出错是非常有帮助的!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2012-10-20
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多