MFC中某段代码中的的内存出错问题
voidCMyDlg::OnOk(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(true);i...
void CMyDlg::OnOk()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int a[4] ={0},b = 0;
char *s ,*p ;
s = (LPSTR)(LPCTSTR)m_key;
if(strlen(s)>=8 && strlen(s)<=16)
a[0] = 1;
p = s;
while(*p)
{
if(*s>='a'&&*s<='z')
{
a[1] = 1;break;
}
else
s++;
}
p = s;
while(*p)
{
if(*s>='A'&&*s<='Z')
{
a[2] = 1;break;
}
else
s++;
}
p = s;
while(*p)
{
if(*s>='0'&&*s<='9')
{
a[3] = 1;break;
}
else
s++;
}
b = a[0]+a[1]+a[2]+a[3];
if(b == 2)
m_print = "安全级别一般";
else if(b == 3)
m_print = "安全级别较高";
else if(b == 4)
m_print = "安全级别很高";
else
m_print = "安全级别较低";
UpdateData(false);
} 展开
{
// TODO: Add your control notification handler code here
UpdateData(true);
int a[4] ={0},b = 0;
char *s ,*p ;
s = (LPSTR)(LPCTSTR)m_key;
if(strlen(s)>=8 && strlen(s)<=16)
a[0] = 1;
p = s;
while(*p)
{
if(*s>='a'&&*s<='z')
{
a[1] = 1;break;
}
else
s++;
}
p = s;
while(*p)
{
if(*s>='A'&&*s<='Z')
{
a[2] = 1;break;
}
else
s++;
}
p = s;
while(*p)
{
if(*s>='0'&&*s<='9')
{
a[3] = 1;break;
}
else
s++;
}
b = a[0]+a[1]+a[2]+a[3];
if(b == 2)
m_print = "安全级别一般";
else if(b == 3)
m_print = "安全级别较高";
else if(b == 4)
m_print = "安全级别很高";
else
m_print = "安全级别较低";
UpdateData(false);
} 展开
展开全部
写法多错了。。
你看过
ASCII 码表没有。。
按你这顺序s--;的应该。。
s++溢出很正常。。
在第一个循环就过不去了,,
小写字母的ASCII吗值要比 大写字母大。。
自己看下ASCII 码表问题就解决了。。。
你看过
ASCII 码表没有。。
按你这顺序s--;的应该。。
s++溢出很正常。。
在第一个循环就过不去了,,
小写字母的ASCII吗值要比 大写字母大。。
自己看下ASCII 码表问题就解决了。。。
追问
什么跟什么啊。。。我只是验证是否出现了大写字母和小写字母。。。
s++正好能保证整个字符串都查过了啊,而且最后应该有\0才对。。。
追答
m_key 这个我理解错了,,我以为是一个按键码。。。
现在清楚你写了些什么了
s在上个循环就遍历光了。。
p = s;
while(*p)
{
if(*s>='A'&&*s<='Z')
{
a[2] = 1;break;
}
else
s++; ..执行到这里的时候就超出的字符串的长度了。指针在乱指了。。
}
第二个循环的时候s应该赋初始值
s=初始str值;
p=s;
这样写...
第三个循环的时候也一样。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询