【发布时间】:2013-04-15 14:37:39
【问题描述】:
我正在尝试将一个宽 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 上不起作用?程序不应该只在到达函数调用行时才崩溃吗?
【问题讨论】:
-
m_lpszWideText是如何定义的? -
这是我自己的(文本组件)类的成员指针:
private: const wchar_t* m_lpszWideText; -
如何为它分配内存?为什么需要修改时是
const?为什么不直接使用std::wstring? -
其实这不是一个坏主意..哎呀。好吧,我总是被教导 C-string 无论如何都是“const char *”。我仍然不确定它是指向 char 数组的常量指针还是指向 const chars rofl 数组的指针。
标签: c++ winapi memory copy cstring