对这个有关问题很郁闷

对这个问题很郁闷!
#include<iostream>
using namespace std;
int main(void)
{
int strcmp(char *,char *);
char *p,*q,s1[80],s2[80];
int t;
cout<<"请输入两个字符串:"<<endl;
cin>>s1;
         cin>>s2
p=s1;
q=s2;
t=strcmp(p,q);
if(t==0)
cout<<"两个字符串相等!"<<endl;
else if(t>0)
cout<<s1<<" 字符串大于 "<<s2;
else
cout<<s2<<" 字符串大于 "<<s1;
return 0;
}
int strcmp(char *p,char *q)
{
for(;(*p)==(*q)||(*p)!='\0'||(*q)!='\0';p++,q++)
;
if((*p)='\0'&&(*q)=='\0')
return 0;
else
return(*(p--)-*(q--));
}

------解决方案--------------------
cin>>s1;
         cin>>s2; 似乎缺了个分号,还有这种数组初始化的方式你认为可行吗
------解决方案--------------------
for(;(*p)==(*q)&&(*p)!='\0'&&(*q)!='\0';p++,q++)
------解决方案--------------------

int mystrcmp(char *p,char *q)
{
    int i = 0;
    while(p[i] && q[i] && p[i] == q[i])
    {
       i++;
    }
    return p[i] - q[i];
}


不知道是不是这样
------解决方案--------------------
目测 for循环下面多了个; for循环体要用{}
------解决方案--------------------
引用:
for(;(*p)==(*q)&amp;&amp;(*p)!='\0'&amp;&amp;(*q)!='\0';p++,q++)

+1
------解决方案--------------------
if((*p)='\0'&&(*q)=='\0')这句导致的
  

*p=='\0'对这个有关问题很郁闷

昨天第一遍目测  看错了对这个有关问题很郁闷
------解决方案--------------------
p,q的访问越界
------解决方案--------------------
比较函数里for循环括号里有逻辑错误,*p == *q 后应该用&& 和后面两个(...
------解决方案--------------------
 ...)连接,全部用或 p和q就一直++,就不知到跑到哪里去了 那一行改成 for(;(*p)==(*q)&&((*p)!='\0'
------解决方案--------------------
(*q)!='\0');p++,q++)
------解决方案--------------------
我只看看讨论意见。
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。