C函数strchr – 如何计算字符的位置?

我在C中有strchr函数的示例代码。

/* strchr example */ #include  #include  int main () { char str[] = "This is a sample string"; char * pch; printf ("Looking for the 's' character in \"%s\"...\n",str); pch=strchr(str,'s'); while (pch!=NULL) { printf ("found at %d\n",pch-str+1); pch=strchr(pch+1,'s'); } return 0; } 

问题是,我不明白,这个程序如何计算外观字符的位置。 我认为它与“pch”和“str”的指针有关,但这是如何工作的?

如果有人可以更详细地解释这一点,那就太棒了。

谢谢,eljobso

它只是从指向找到结果的指针减去str ,它是指向字符串第一个字符的指针。

然后它成为字符的位置,从0开始索引。这很容易理解,如果在字符串的第一个位置找到字符,则返回的指针将等于str ,因此(pstr - str) == 0是真的。 添加一个使它基于1,这有时用于表示目的。