从K&R的ANSI C编程(第69页)开始,有一个strindex函数,它将返回fisrt搜索字符串在源字符串中的位置:

#include <stdio.h>
#define MAXLINE 1000 //max input length
int getline(char line[], int max);
int Strindex(char source[], char searchfor[]);
char pattern[] = "ould";

int main()
{
    char line[MAXLINE];
    int found = 0;

    while (getline(line, MAXLINE) > 0)
        if (Strindex(line, pattern) >= 0) {
            printf("%s", line);
            found++;
        }
    return found;
} // end of main function


int  getline(char s[], int lim)
{
    int c, i;
    i = 0;
    while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
        s[i++] = c;
    if (c == '\n')
        s[i++] = c;
    s[i] = '\0';
    return i;
}

int Strindex(char s[], char t[])
{
    int i, j, k;

    for (i = 0; s[i] != '\0'; i++) {
        for (j = i, k = 0; s[j] == t[k]; j++, k++)
            ;
        if (k > 0 && t[k] == '\0') //here is the k
            return i;
    }
    return -1;
}


我的问题是:

j = i, k = 0; s[j] != t[k](如果t[]s[]不是空字符串)时,看来t[0]永远不会得到\0的值?然后,此k>0在最后的if语句中做什么?

最佳答案

好吧,它只是丢弃了所有0长度目标。如果要丢弃0长度目标,则需要这样做。(对于此代码。但是有更好的方法可以做到这一点)。

假设s"CODE",并且t是包含\0的空字符串。因此,在这种情况下,它进入for循环,而内部进入for循环中断。然后k=0,如果省略该条件(k>0),则使用if( t[k]=='\0'),则该条件为true并返回。但又有人可能会争辩说,如果传递了空目标,它应该与任何索引匹配。

关于c - K&R的C编程在strindex函数中最后k> 0做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48204879/

10-12 19:55