请帮助制作strstr()

fud*_*din 2 c

我已经创建了strstr()函数,但程序没有给出任何输出,只是一个空白的屏幕.请看一下代码.

#include<stdio.h>
#include<conio.h>

    const char* mystrstr(const char *str1, const char *str2);
    int main()
    {
        const char *str1="chal bhai nikal";
        const char *str2="nikal",*result;
        result=mystrstr(str1,str2);
        printf("found at %d location",(int*)*result);
        getch();
        return 0;


    }
    const char * mystrstr(const char *s1, const char *s2)
    {
        int i,j,k,len2,count=0;
        char *p;
        for(len2=0;*s2!='\0';len2++);//len2 becomes the length of s2
        for(i=0,count=0;*s1!='\0';i++)
        {
            if(*(s1+i)==*s2)
            {
                for(j=i,k=0;*s2!='\0';j++,k++)
                {
                    if(*(s1+j)==*(s2+i))
                    count++;
                    if(count==len2)
                    {
                        p=(char*)malloc(sizeof(char*));
                        *p='i';
                    return p;
                    }
                }

            }

        }
        return NULL;
    }
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 5

这条评论的界限:

//len2 becomes the length of s2
Run Code Online (Sandbox Code Playgroud)

被打破.你反复检查第一个字符s2.而不是*s2,尝试s2[len2].

编辑:正如其他人所说,这个实现显然有很多问题.如果你想要天真的暴力strstr算法,这里有一个简洁快速的版本:

char *naive_strstr(const char *h, const char *n)
{
    size_t i;
    for (i=0; n[i] && h[i]; i++)
       for (; n[i] != h[i]; h++) i=0;
    return n[i] ? 0 : (char *)h;
}
Run Code Online (Sandbox Code Playgroud)