CEdit :: GetLine()Windows 7

我有以下代码段,其中m_edit是一个CEdit控件:

 TCHAR lpsz[MAX_PATH+1]; // get the edit box text m_edit.GetLine(0,lpsz, MAX_PATH); 

这适用于运行Windows XP和更早版本的计算机。 我没有在Vista中testing过,但在Windows 7上,lpsz获取了插入到其中的垃圾unicode字符(以及有时候的实际文本)。 有什么想法在这里发生了什么?

Solutions Collecting From Web of "CEdit :: GetLine()Windows 7"

既然你使用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上正常工作。)

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

它不是null结尾。 你需要这样做:

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