很多地方都写着“无效间接寻址”。请帮忙。

   int main()
    {

        char *s1,*s2,*position;
        printf("Enter string:\n");
        gets(s1);
        printf("Enter word to find:\n");
        gets(s2);
        *position=ststr(*s1,*s1);
        if(*position)
        printf("word is found at %c loc\n",*position);
        else
        printf("word not found");
        getch();
        return 0;

    }

char *strstr(char *s1,char *s2)
{
    int flag=1;
    char i,j;
    for(i=0; ;i++)
    {
        if(*s1[i]==*s2[0])
        for(j=i;*s2;j++)
        {
            if(*s1[j]!=*s2[j])
            flag=0;
        }

    }
    if(flag)
    return i;
    else
    return 0;
}

最佳答案

首先,main中的s1s2尚未初始化为指向任何有意义的位置。将它们声明为静态数组,或者在运行时使用malloc()calloc()为它们分配内存:

#define SIZE 20 // or some number big enough to hold your input
...
char s1[SIZE], s2[SIZE], *position; // s1 and s2 declared statically

第二,从不从不从不从不使用gets();它将在您的程序中引入一个失败点。改为使用fgets()
if (fgets(s1, sizeof s1, stdin) != NULL)
  // process s1
else
  // check for EOF or error on read

编辑
正如其他人所指出的,您在strstr()函数中的比较需要
*s1 == *s2


s1[i] == s2[i]

但首先,您需要正确地处理在main中分配缓冲区的问题。

关于c - 实现strstr()函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3557178/

10-11 23:12
查看更多