0

我有一个 CEdit,我想用它来提取数据。

wchar_t *temp = (wchar_t*)dialog.editbox.GetBuffer(0);
dialog.editbox.ReleaseBuffer();

现在我想将此文本保存在这样的对象指针中:

selectedShape->setText(temp);

这项工作很完美,但只要你在方法的范围内,因为当我稍后保存文件时,文本不再在对象中。

有谁知道我可以如何保存这个wchar_t*以备后用?

4

2 回答 2

2

正如@Prætorian 所说,您的代码似乎缺少使用CString您正在获取缓冲区的类的步骤。

http://msdn.microsoft.com/en-us/library/aa314880(v=vs.60).aspx

如果可能,请避免使用动态内存解决方案。相反,将您temp的值传递为将管理其自己的内存的 CString 对象。常用的 WindowsetText函数采用字符串指针(CString 可以隐式转换为),并将复制底层字符串数据。如果您编写自己的对象,请按值将 CString 对象作为成员。

(我将在这里添加我通常的“90 年代被称为,他们想要他们的框架回来”免责声明。 试试 Qt。)

于 2012-10-08T16:22:31.443 回答
1

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;
于 2012-10-08T16:17:31.900 回答