VC6的代码,在VS2008中编译(因为要编译64的,以下问题是编译32,64都存在,而拿VC6直接编译64位一样有问题)
环境,XP,vs2008,编译32位的DLL
可以执行,但是当输入密码。点击确定的时候。程序报错。
应用程序发生异常 未知的软件异常 (0xc0000409),位置为 0x00ae1cdc。
代码如下,当删掉strcpy(MDResult,MDString(Input));后,不再报错。但是输入密码都是错误的。
void CMyUI::OnBUTTONEnter()
{
// TODO: Add your control notification handler code here
GetDlgItemText(IDC_EDIT1,Input,256);
strcpy(MDResult,MDString(Input)); //删掉这句以后。就正常不出错了。
if( !strcmp(MDResult,g_Pass) )
{
MessageBox("OK.","",0);
SetDlgItemText(IDC_EDIT1,"");
CDlgTools MyDlgTools;
MyDlgTools.DoModal();
}
else
{
// MessageBox("Wrong.","",0);
SetDlgItemText(IDC_EDIT1,"");
}
}
------解决思路----------------------
字符串复制,是否越界。
------解决思路----------------------
GetDlgItemText(IDC_EDIT1,Input,256);
返回的字串可能没有包含结束字符,必须代码添加
int l=GetDlgItemText(IDC_EDIT1,Input,256);
Input[l]=0;
------解决思路----------------------
检查是否越界,同时建议使用更安全的strcpy_s
------解决思路----------------------
MDString是不是进行MD5加密相关的函数?
你还是debug模式下单步调试看看具体情况吧
------解决思路----------------------
strcpy需要提供内存。