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);

}
展开
 我来答
455175633
2012-02-06 · TA获得超过301个赞
知道小有建树答主
回答量:632
采纳率:0%
帮助的人:412万
展开全部
写法多错了。。
你看过
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;
这样写...
第三个循环的时候也一样。。
muye5
2012-02-06
知道答主
回答量:29
采纳率:0%
帮助的人:17.4万
展开全部
具体的错误提示呢?
追问
编译通过,执行的时候弹出提示:该程序使用的内存为不可读,要终止程序请按确定。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式