你的问题在调用了GetLine上面,根据MSDN的解释,GetLine有这个特点:
The copied line does not contain a null-termination character.
这个很重要,他不复制字符串结尾的0,所以就出现了你上面的情况,
因为你先用SecureZeroMemory给字符串全部填了0,那么内存其实就是这样的十个字节:
'\0' '\0' '\0' '\0' '\0' '\0' '\0' '\0' '\0' '\0'
取了1024之后,内存变成:
'1' \0' '2' '4' '\0' '\0' '\0' '\0' '\0' '\0'
再取80,就变成了:
'8' \0' '2' '4' '\0' '\0' '\0' '\0' '\0' '\0'
由于函数不复制最后的0,所以就出现了8024的情况。
要正确使用,你需要在调用CEdit::LineLength取得你要得到的行的字符数,然后给字符串的对应位置赋个0.
其实如果是个单行的文本框,你调用GetWindowText就行了,他会包括结尾的0.
更普遍的读编辑框数字的方法是直接调用
CWnd::GetDlgItemInt()
这样你就根本不需要为编辑框关联CEdit的变量,而且读出来系统帮你直接转成了数字,你还允许给这个函数提供一个BOOL的指针,用来告诉你用户是不是在编辑框输入了出来数字以外的其他内容,比如输入了字母。
CEdit继承CWnd,那么CEdit新增的函数,CWnd中没有是很正常的。
int len = ((CEdit*)GetDlgItem(IDC_EDIT1))->LineLength(GetDlgItem(IDC_EDIT1)->LineIndex(i));//第i行字符串的长度
这样就行了