vc一个简单的向其他窗口的控件添加文字的方法,但是出现堆栈损坏,是怎么回事,有没有更好的方法?

void AddLog(HWND edhwnd,CString addstr)
{
CString ss;

GetWindowText(edhwnd,ss.GetBuffer(),GetWindowTextLength(edhwnd) +1);

ss = ss + TEXT("\r\n") + addstr;

SetWindowTextW(edhwnd,ss.GetBuffer());
}

ss = ss + TEXT("\r\n") + addstr;语法上这句没什么错

问题应该出在GetWindowText(edhwnd,ss.GetBuffer(),GetWindowTextLength(edhwnd) +1);

获得的缓冲区ss有问题
ss.GetBuffer(int nMinBufLength ); 需要一个参数,来指定ss的最小长度,这个函数获得的缓冲区是可以直接修改,在使用完后要调用ReleaseBuffer()释放缓冲区,并设置CString的最新长度
故修改程序如下:

CString ss;
int len = ::GetWindowTextLength(edhwnd) +1);
::GetWindowText(edhwnd,ss.GetBuffer(len), len);
ss.ReleaseBuffer();
ss = ss + TEXT("\r\n") + addstr;
::SetWindowText(edhwnd,ss.GetBuffer(0));
以上代码测试通过
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-06
调试看看哪一步出的问题。追问

ss = ss + TEXT("\r\n") + addstr; 这句出问题了 堆栈损坏了。

相似回答