0

我正在尝试将宽 c 字符串从一个地方复制到另一个地方。我在 windows8 64 位平台上使用 Visual Studio 2012 express。除非我尝试在使用 Windows7 x64 的主计算机上运行该应用程序,否则它工作得非常好。它立即崩溃。没有异常错误,尽管它是一个没有任何可跟踪错误代码的混乱崩溃。如果您需要有关崩溃本身的更多具体信息,我将尝试提供。当我注释掉复制程序时,它工作得很好。所以很明显问题出在函数本身。这是执行所有复制的行:

virtual void CClass::ChangeText();
void CClass::ChangeText(float _f)
{
    std::wstringstream wss;
    wss << _f;
    wcscpy(const_cast<wchar_t *>(this->m_lpszWideText),wss.str().c_str());
}

^ 在 win7 上崩溃/在 win8 上工作

我的疯狂猜测是新编译器使用了新版本的 wmemcpy,它在 Windows 7 上不起作用?程序不应该只在到达函数调用行时才崩溃吗?

4

1 回答 1

0

字符串复制算法的崩溃通常有两个来源:

  1. 您的源不是 NULL-Terminated 在您的示例中,情况并非如此,因为您从 wstringstream::c_str() 中提取它

  2. 您的 Destination 不够大,无法处理源数据,因此写入超出 Bounds。这可能是您崩溃的原因,意味着您的 this->m_lpszWideText 太小(请给出它的声明,如果它是动态分配的,请告诉我们如何。)

于 2013-04-15T14:44:27.360 回答