0

我正在尝试复制 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);
      }
};
4

3 回答 3

1

LPTSTR 只是一个指针。因此,您需要在使用它之前注意分配内存。TCHAR* 也是如此。或者,如果您不得不担心 unicode 字符串,您可以使用 wstring。

于 2012-06-11T10:09:38.883 回答
0

就像其他答案所说的那样,您需要先为“LPTSTR 文本”分配内存,然后才能使用它。

获取要复制的字符串的长度(strlen 应该这样做),然后像这样分配内存:

text = TCHAR[length];

您可以为您的类声明一个解构器,以在程序结束或程序离开类实例的范围时删除分配的内存。

~CheckBox()
{
if (text)
delete[] text;
}

您还应该创建另一个不带参数的构造函数,将文本设置为 NULL;

于 2012-06-11T10:36:25.597 回答
0

您复制到一个未初始化的指针,这将覆盖内存中的一些随机区域。您需要先为指针分配内存,并记住在不再需要时释放内存。

于 2012-06-11T10:07:55.207 回答