我有一个 CEdit,我想用它来提取数据。
wchar_t *temp = (wchar_t*)dialog.editbox.GetBuffer(0);
dialog.editbox.ReleaseBuffer();
现在我想将此文本保存在这样的对象指针中:
selectedShape->setText(temp);
这项工作很完美,但只要你在方法的范围内,因为当我稍后保存文件时,文本不再在对象中。
有谁知道我可以如何保存这个wchar_t*
以备后用?
正如@Prætorian 所说,您的代码似乎缺少使用CString
您正在获取缓冲区的类的步骤。
http://msdn.microsoft.com/en-us/library/aa314880(v=vs.60).aspx
如果可能,请避免使用动态内存解决方案。相反,将您temp
的值传递为将管理其自己的内存的 CString 对象。常用的 WindowsetText
函数采用字符串指针(CString 可以隐式转换为),并将复制底层字符串数据。如果您编写自己的对象,请按值将 CString 对象作为成员。
(我将在这里添加我通常的“90 年代被称为,他们想要他们的框架回来”免责声明。 试试 Qt。)
temp
指针指向超出范围的数据,因此您需要动态分配内存来存储该值。像这样的东西应该工作:
// Updated to use wstring, thanks praetorian
std::wstring tempStr((wchar_t*)dialog.editbox.GetBuffer(0));
或者:
int length = /*figure out the length here*/;
wchar_t *temp = new wchar_t[length];
memcpy(temp, dialog.editbox.GetBuffer(0), length*sizeof(wchar_t));
// dont forget to delete it like this: delete [] temp;