mfc程序运行时出现了未经处理的win32异常
voidregistry::OnBOk(){//TODO:AddyourcontrolnotificationhandlercodehereCStringstr,str1...
void registry::OnBOk()
{
// TODO: Add your control notification handler code here
CString str,str1,str2;
//m_pText->GetDlgItemText(IDC_EDIT1,str[10],10);
GetDlgItem(IDC_r1)->GetWindowText(str);
GetDlgItem(IDC_r2)->GetWindowText(str1);
GetDlgItem(IDC_name)->GetWindowText(str2);
///////////////////////////检索账号/////////////////////
char Buf[10];
Buf[10]=0;
printf(Buf,"%d",str);
for(int i=0;i<sizeof(Buf);i++)
{
if(!Buf[i]>='a'&&!Buf[i]<='z'&&!Buf[i]>='A'&&!Buf[i]<='Z'&&!Buf[i]>='0'&&!Buf[i]<='9')
{
MessageBox("账号必须为数字或字母");
return ;
}
else
{
Buf[i]++;
}
}
str+="\r\n";
str+=str1;
str1="";
ofstream Ofout("C://passwold.txt"); //保存密码到c盘根目录
Ofout<<str<<"\n";
///////////////////////////检索账号/////////////////////
/////////////////////////检索地区/////////////////////
ifstream fout("C:\Documents and Settings\Administrator\新建文件夹\chinamap.txt",ios::binary|ios::in,0);
CString str3;
GetDlgItemText(IDC_china_x,str3);
char M[400];
M[400]=0;
fout>>M;
for(int j=0;j='\0';j++)
{
if(!M[j]==str3)
{
M[j]++;
}
else
{
SetDlgItemText(china,str3);
return ;
}
}
////////////////////////检索性别////////////////////
if(IDC_R_man==1)
{
str1="男";
}else
{
str1="女";
}
str+="\r\n"; //register add posswork
str+=str2; //name
str+="\r\n";
str+=str1; //gender
str+="\r\n";
str+=str3; //region
CString str4,str5;
str4="127.0.0.1";
str5="5002";
str5.TrimLeft();
str5.TrimRight();
int pot;
pot=atoi(str5);
cc.Create();
if(SOCKET_ERROR==cc.Connect(str,pot))
{
MessageBox("申请连接失败!");
}
int len=str.GetLength();
cc.Send(str,len);
registry::OnClose();
不知道为什么,是哪里出错了。
我觉得是for循环检索字符的问题,求高手解答 展开
{
// TODO: Add your control notification handler code here
CString str,str1,str2;
//m_pText->GetDlgItemText(IDC_EDIT1,str[10],10);
GetDlgItem(IDC_r1)->GetWindowText(str);
GetDlgItem(IDC_r2)->GetWindowText(str1);
GetDlgItem(IDC_name)->GetWindowText(str2);
///////////////////////////检索账号/////////////////////
char Buf[10];
Buf[10]=0;
printf(Buf,"%d",str);
for(int i=0;i<sizeof(Buf);i++)
{
if(!Buf[i]>='a'&&!Buf[i]<='z'&&!Buf[i]>='A'&&!Buf[i]<='Z'&&!Buf[i]>='0'&&!Buf[i]<='9')
{
MessageBox("账号必须为数字或字母");
return ;
}
else
{
Buf[i]++;
}
}
str+="\r\n";
str+=str1;
str1="";
ofstream Ofout("C://passwold.txt"); //保存密码到c盘根目录
Ofout<<str<<"\n";
///////////////////////////检索账号/////////////////////
/////////////////////////检索地区/////////////////////
ifstream fout("C:\Documents and Settings\Administrator\新建文件夹\chinamap.txt",ios::binary|ios::in,0);
CString str3;
GetDlgItemText(IDC_china_x,str3);
char M[400];
M[400]=0;
fout>>M;
for(int j=0;j='\0';j++)
{
if(!M[j]==str3)
{
M[j]++;
}
else
{
SetDlgItemText(china,str3);
return ;
}
}
////////////////////////检索性别////////////////////
if(IDC_R_man==1)
{
str1="男";
}else
{
str1="女";
}
str+="\r\n"; //register add posswork
str+=str2; //name
str+="\r\n";
str+=str1; //gender
str+="\r\n";
str+=str3; //region
CString str4,str5;
str4="127.0.0.1";
str5="5002";
str5.TrimLeft();
str5.TrimRight();
int pot;
pot=atoi(str5);
cc.Create();
if(SOCKET_ERROR==cc.Connect(str,pot))
{
MessageBox("申请连接失败!");
}
int len=str.GetLength();
cc.Send(str,len);
registry::OnClose();
不知道为什么,是哪里出错了。
我觉得是for循环检索字符的问题,求高手解答 展开
1个回答
展开全部
///////////////////////////检索账号/////////////////////
char Buf[10];
Buf[10]=0;
printf(Buf,"%d",str);
for(int i=0;i<sizeof(Buf);i++)
Buf[10]=0;
这句错了,下标10已经越界,10的数组下标范围0~9,最大下标为9
printf(Buf,"%d",str);
这句错了,字符串拷贝,应该用sprintf而不是printf,另外%d干啥用?数字?,要用%s
for(int i=0;i<sizeof(Buf);i++)
这里有问题,sizeof(Buf)结果是10,你等于遍历了数组而不是字符串,必然会访问并判断字符串结束符'\0',而这个在之后的if判断中必然报错“账号必须为数字或字母”,如果没这个提示,说明你程序根本没有运行到这一步就报错了,这里判定条件应该是Buf[i]!='\0'
更多追问追答
追问
非常感谢你的解答,可是我刚才把所有的这些代码注释掉,只剩下发送socket的代码。还是出错。
我这个csocket是定义在别的类中的,派生自CSocket的。
我只是添加了那个类的头文件,然后直接创建了一个csocket的对象,不知道会不会是这里出了问题
追答
从已提供代码,无法看出socket是否有问题。
通常这类问题应该使用调试来解决,你可以注销后半部分代码,F5调试看看,然后一步一步增加代码调试,看看具体问题都在哪里。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询