建立一个工程,叫Mfctest,单文档,View部分继承CEditView。
请看下面的代码:
void CMfctestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
{
//获取对应的文档对象
CMfctestDoc* pDoc = GetDocument();
//确保文档对象有效
ASSERT_VALID(pDoc);
//获取与本视图对应的编辑控件
CEdit& edit = GetEditCtrl();
//从编辑控件中获取最后一行文本内容
TCHAR buffer[100];
memset(buffer, 0, sizeof(buffer));
int index = edit.GetLineCount() - 1;
edit.GetLine(index, buffer, sizeof(buffer)-1);
}
CEditView::OnChar(nChar, nRepCnt, nFlags);
}
我想在输入回车的时候,把CEditView里最后一行的内容传给buffer,在实际调试中,发现有问题,比如:
我输入“hehe”(输入的是引号内的字符),结果调试时,发现buffer里面的内容是这样的:
buffer[0] = 'h';
buffer[1] = 'e';
buffer[2] = 'h';
buffer[3] = 'e';
buffer[4] = '?';
buffer[5] = '2';
buffer[6] = ' ';//(引号内的字符为ASCII码为0x13的字符)
buffer[7] = ''; //(引号内的字符为ASCII码为0x00的字符)
...
buffer[99]='';(从buufer[7]到buffer[99],都是0x00)
大家发现没有,平空多了buffer[4]和buffer[5]两个字符,buffer[6]应该是结束字符吧,还算正常。
我测试过多次,只要是输入“hehe”字符,就是这样结果,why?
请看下面的代码:
void CMfctestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
{
//获取对应的文档对象
CMfctestDoc* pDoc = GetDocument();
//确保文档对象有效
ASSERT_VALID(pDoc);
//获取与本视图对应的编辑控件
CEdit& edit = GetEditCtrl();
//从编辑控件中获取最后一行文本内容
TCHAR buffer[100];
memset(buffer, 0, sizeof(buffer));
int index = edit.GetLineCount() - 1;
edit.GetLine(index, buffer, sizeof(buffer)-1);
}
CEditView::OnChar(nChar, nRepCnt, nFlags);
}
我想在输入回车的时候,把CEditView里最后一行的内容传给buffer,在实际调试中,发现有问题,比如:
我输入“hehe”(输入的是引号内的字符),结果调试时,发现buffer里面的内容是这样的:
buffer[0] = 'h';
buffer[1] = 'e';
buffer[2] = 'h';
buffer[3] = 'e';
buffer[4] = '?';
buffer[5] = '2';
buffer[6] = ' ';//(引号内的字符为ASCII码为0x13的字符)
buffer[7] = ''; //(引号内的字符为ASCII码为0x00的字符)
...
buffer[99]='';(从buufer[7]到buffer[99],都是0x00)
大家发现没有,平空多了buffer[4]和buffer[5]两个字符,buffer[6]应该是结束字符吧,还算正常。
我测试过多次,只要是输入“hehe”字符,就是这样结果,why?
其实,我写的这个东西是网络聊天的一个部分,因为我测试时发现另一端送来的字符,在末尾老是有乱码,结果找来找去,发现问题出在上面讲的部分。