为什么我这个strstr函数没能得到想要的结果

问题遇到的现象和发生背景
#include 
char* mystrstr(char*p1,char*p2)
{
    char*s1=NULL;
    char*s2=NULL;
    char*cur=p1;
    if(*p2)
    {
        return p1;}
    while(*cur)
    {
        s1=cur;
        s2=p2;
        while((*s1!='\0')&&(*s2!='\0')&&(*s1==*s2))
        {
            s1++;
            s2++;}
        if(*p2)
        {
            return  cur;}
        cur++;
    
    }
    return NULL;}

int main()
{
    char *p1="abcdef";

    char *p2 ="bcd";
     char* ret=mystrstr(p1,p2); 
     if(ret==NULL)
         printf("z");
     else
     printf("%s\n",ret);
     return 0;
}

用代码块功能插入代码,请勿粘贴截图
我想要达到的结果


问题稍微有点多,我先大体说下问题

  1. 下面两处
if(*p2)
    {
        return p1;}
//...
if(*p2)
        {
            return  cur;}

这里显然是希望当p2指向空字符时返回。但是p2第一个字符不为空字符,直接就return了,建议改为

if(*p2 == '\0')
  1. 指针指向的内容很混乱,建议先学习使用你写代码的软件的调试功能,打个断点进行单步调试,看看s1和s2具体指向什么字符

程序走到这直接返回一个p1,mystrstr函数基本白写

if(*p2)
    {
        return p1;}

char* mystrstr(char* p1, char* p2)
{
    char* s1 = NULL;
    char* s2 = NULL;
    char* cur = p1;
    if (*p2 == '\0')
    {
        return p1;
    }
    while (*cur != '\0')
    {
        s1 = cur;
        s2 = p2;
        while ((*s1 != '\0') && (*s2 != '\0') && (*s1 == *s2))
        {
            s1++;
            s2++;
        }
        if (*s2 =='\0')
        {
            return  cur;
        }
        cur++;

    }
    return NULL;
}