C ++丢失变量

时间:2012-10-08 16:11:17

标签: c++ pointers mfc scope

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

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

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

selectedShape->setText(temp);

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

有人知道如何保存此wchar_t*以供日后使用吗?

2 个答案:

答案 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;