我有一个CEdit,我想用这个提取数据。
wchar_t *temp = (wchar_t*)dialog.editbox.GetBuffer(0);
dialog.editbox.ReleaseBuffer();
现在我想将这个文本保存在这样的对象指针中:
selectedShape->setText(temp);
这项工作很完美,但只要你在方法的范围内,因为当我稍后保存文件时,文本不再出现在对象中。
有人知道如何保存此wchar_t*
以供日后使用吗?
答案 0 :(得分:2)
正如@Prætorian所说,你的代码似乎缺少了你正在使用其缓冲区的CString
类的一个步骤。
http://msdn.microsoft.com/en-us/library/aa314880(v=vs.60).aspx
如果可能,请避免使用动态内存解决方案。相反,将temp
值作为CString对象传递,以管理自己的内存。库存窗口setText
函数接受字符串指针(CString可以隐式转换),并将复制基础字符串数据。如果您编写自己的对象,请按值将CString对象保存为成员。
(我会在这里添加我常用的“The 90s,他们希望他们的框架”免责声明。Try Qt。)
答案 1 :(得分: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;