C 需要解释findString()函数返回的结果

C 需要解释findString()函数返回的结果,c,C,为什么下面的findString()函数返回给定参数的指示值 findString(“文本”,“文本”)返回0 findString(“,“text”)返回-1 findString(“,”)返回-1 我读过strstr,也看了其他问题,只是不明白 // find s1 inside source, return index number if found, -1 if not found #include <stdio.h> #include <stdbool.h&

为什么下面的findString()函数返回给定参数的指示值

findString(“文本”,“文本”)返回0

findString(“,“text”)返回-1

findString(“,”)返回-1

我读过strstr,也看了其他问题,只是不明白

// find s1 inside source, return index number if found, -1 if not found    

#include <stdio.h>
#include <stdbool.h>

int  findString (const char  source[], const char  s[])  
{  
    int  i, j, foundit = false;  

    // try each character in source   

    for ( i = 0;  source[i] != '\0'  &&  !foundit;  ++i ) {  
        foundit = true;  

        // now see if corresponding chars from s match   

        for ( j = 0;  s[j] != '\0' &&  foundit;  ++j )  
            if ( source[j + i] != s[j] || source[j + i] == '\0' )  
              foundit = false;  

        if (foundit)  
           return i;  
    }  

    return -1;  
}  

int main (void)
{
    int index;

    printf ("index = %i\n", findString("text", ""));
    printf ("index = %i\n", findString("", "text"));
    printf ("index = %i\n", findString("", ""));

    return 0;
}
//在源代码中查找s1,如果找到则返回索引号,如果未找到则返回-1
#包括
#包括
int findString(常量字符源[],常量字符s[])
{  
int i,j,foundit=false;
//尝试源代码中的每个字符
对于(i=0;源[i]!='\0'&&!foundit;++i){
foundit=true;
//现在看看s中对应的字符是否匹配
对于(j=0;s[j]!='\0'&&foundit;++j)
如果(源[j+i]!=s[j]| |源[j+i]=='\0')
foundit=false;
如果(找到它)
返回i;
}  
返回-1;
}  
内部主(空)
{
整数指数;
printf(“索引=%i\n”,findString(“文本”),findString;
printf(“索引=%i\n”,findString(“,“文本”);
printf(“索引=%i\n”,findString(“,”);
返回0;
}
  • 第一个调用返回
    0
    ,因为在索引0处的任何字符串中都可以找到空字符串(除了代码中存在错误,请参见下文)
  • 第二个调用返回
    -1
    ,因为在空字符串中找不到非空字符串
  • 第三个调用返回
    -1
    ,因为您的代码中有一个错误:当未输入外部循环时(即
    字符串为空),当搜索字符串
    s
    也为空时,您应该添加一个特殊情况以返回
    0

它返回
source
中第一次出现的
s
的索引。如果
s
source
中不存在,它将返回
-1

是否尝试使用调试器单步执行?您使用的IDE是什么?gcc、minGW和notepadA一篇随意阅读的文章表明,函数可以提前退出,然后返回-1。查找空字符串的空间大小写在逻辑上似乎也是如此。@user6923395返回值应该是0,-1,0。