首页 > 解决方案 > 无法理解 strchr 在 C 中获取字符串中字符位置的用法

问题描述

此代码将输出字符串中字符的索引:

#include <stdio.h>
#include <string.h>

int main(void){

   char str[100]="birds are dying";
   char *p;

   p = strchr(str,'e'); 
   int i=p-str;

   printf("%d" , i);

   return 0;
}

我无法理解的唯一代码行是:

int i=p-str;
  1. str 是一个字符串,p 也是,我搜索了将字符串打印为整数的结果,发现它是一个未定义的行为,那么它实际上返回了什么?

  2. p - str 是 : e dying - birds are dying,当我们以某种方式将其更改为整数时,为什么它返回正值

谢谢

标签: cc-stringspointer-arithmeticstring.hstrchr

解决方案


它不是一个字符串——它是一个指针。这是合法的指针算术。它以指针为单位工作。假设你有

double x[10], *start, *end;
integer exclusive;

start = &x[2];
end = &x[4];
exclusive = end - start;
printf("%d\n", exclusive);

你觉得会打印什么?你会得到 2:不是 2 * sizeof(double)。


推荐阅读