//就是按下OK按钮发生的事件//分配一个空间->将一段字符串复制进去->计算检验和->释放空间void CAddressQDlg::OnOK() { //char *buff=new char[strlen("AT+SSCAN,*")+5]; char *buff=new char[63];//我的机器上少于63就会报错 if(!buff) return; strcpy(buff,"AT+SSCAN,*"); checkSum(buff,strlen(buff)+1); //sendDataFunction(buff,strle(buff+1)); delete []buff; //CDialog::OnOK();}//同学写的检验函数char * CAddressQDlg::checkSum(char *str,int length){ char p,q; char k='\r'; char j='\n'; char *temp; temp=str; temp=temp+2; for(p=*(temp+1);*(temp+1)!='*';temp++) p=p^*(temp+1); q=p; p=p&(char)15; q=(q&(char)(15<<4)); strcat(str,&q); strcat(str,&p); strcat(str,&k); strcat(str,&j); return str;}
char *buff=new char[strlen("AT+SSCAN,*")+5]
p=p^*(temp+1);
引用第2楼第二个太阳于2007-12-25 21:50发表的 :Copy codep=p^*(temp+1);这个得行麦
引用第1楼勇者归来于2007-12-25 21:41发表的 :没看出名堂哈
引用第6楼依然随意于2007-12-25 22:22发表的 : strcat(str,&q); strcat(str,&p); strcat(str,&k); strcat(str,&j);这一类函数是专gate搞缓冲区溢出的
引用第7楼lxlcn于2007-12-25 22:25发表的 :Buff不够大是明显的,但是我想问的就是为什么?..
引用第8楼依然随意于2007-12-25 22:29发表的 :strcpy(),strcat(),scanf()等一系列函数对参数实际长度都没有检查,而你的buff其实是在栈空间里分配的,单从地址上看,buff的地址与主函数的返回地址是相当靠近的
引用第10楼lxlcn于2007-12-25 22:38发表的 :没有检查对分配由什么影响呢?buff是在堆中分配的,不会很近吧?好像关系也不大吧?
引用第11楼依然随意于2007-12-25 22:39发表的 :你可以做个试验。
//问题出在这里 //strcat会将q的地址里的值往str指向的地址复制(不止一个byte,遇到0为止) strcat(str,&q); strcat(str,&p); strcat(str,&k); strcat(str,&j); return str;}