CEdit :: GetLine()窗口7

时间:2011-04-12 14:46:01

标签: c++ windows visual-c++ windows-7 mfc

我有以下代码段m_edit是CEdit控件:

TCHAR lpsz[MAX_PATH+1];

// get the edit box text
m_edit.GetLine(0,lpsz, MAX_PATH); 

这适用于运行Windows XP及更早版本的计算机。我没有在Vista中测试过这个,但是在Windows 7上,lpsz会在其中插入垃圾unicode字符(有时还会显示实际文本)。想知道这里发生了什么吗?

2 个答案:

答案 0 :(得分:4)

它不是空终止。你需要这样做:

int count = m_edit.GetLine(0, lpsz, MAX_PATH);
lpsz[count] = 0;

答案 1 :(得分:3)

由于您使用的是MFC,为什么不利用它的CString类?这是许多程序员被MFC吸引的原因之一,因为它使得使用字符串变得更加容易。

例如,您可以简单地写:

int len = m_edit.LineLength(m_edit.LineIndex(0));
CString path;
LPTSTR p = path.GetBuffer(len);
m_edit.GetLine(0, p, len);
path.ReleaseBuffer();

(以上代码经测试可在Windows 7上正常运行。)

请注意,复制的行不包含空终止字符(请参阅documentation中的“备注”部分)。这可以解释您在更高版本的Windows中看到的无意义字符。