我正在尝试复制LPTSTR并将该字符串存储为对象中的成员变量。但是我复制LPTSTR的尝试似乎失败了,当我去访问/打印复制的LPTSTR的值时,我的程序崩溃了。
是否可以复制LPTSTR并将其存储在我的班级中,或者更好地使用TCHAR *?
class Checkbox
{
private:
LPTSTR text;
HWND hwnd;
public:
Checkbox(HWND nHwnd, LPTSTR nText)
{
lstrcpy(checkText, text);
}
void print()
{
// Causes a crash
MessageBox(hwnd, text, text, MB_OK);
}
};
答案 0 :(得分:1)
LPTSTR只是一个指针。因此,在使用之前需要注意分配内存。 TCHAR *也是如此。或者你可以使用wstring,如果你不得不担心unicode字符串。
答案 1 :(得分:0)
您复制到未初始化的指针,该指针将覆盖内存中的某些随机区域。您需要先为指针分配内存,并且还要记得在不再需要它时释放内存。
答案 2 :(得分:0)
与其他答案一样,您需要先将内存分配给“LPTSTR text”才能使用它。
获取要复制的字符串长度(strlen应该这样做),然后像这样分配内存:
text = TCHAR[length];
您可以为类声明一个解构函数,以便在程序结束或程序离开类实例的范围时删除已分配的内存。
~CheckBox()
{
if (text)
delete[] text;
}
您还应该创建另一个没有参数的构造函数,将文本设置为NULL;