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

elj*_*bso 2 c position character strchr

我在C中的strchr函数有这个示例代码.

/* strchr example */
#include <stdio.h>
#include <string.h>

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,eljobso

unw*_*ind 8

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

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