微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法理解使用strchr来获取C中字符串中字符的位置

如何解决无法理解使用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,当我们以某种方式将其更改为整数时,为什么它返回正值

谢谢

解决方法

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

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

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

您认为将要印刷什么?您将得到2:而不是2 * sizeof(double)。

,

根据C标准(6.3.2.1左值,数组和函数指示符)

3除非它是sizeof运算符的操作数或一元& 运算符,或者是用于初始化数组的字符串文字, 类型为“类型数组”的表达式将转换为 类型为“要输入的指针”的表达式指向初始 数组对象的元素,不是左值。如果数组对象 具有寄存器存储类,行为未定义

在此次通话中

p = strchr(str,'e');

函数strchr返回一个指向符号'e'.的指针

在表达式中

p-str

具有数组类型char[100]的对象str隐式转换为指向其第一个元素的指针。因此表达式表示两个指针的区别。

并根据C标准(6.5.6加法运算符)

9当两个指针相减时,两个都应指向的元素 相同的数组对象,或者在数组的最后一个元素之后 目的;结果是两者的下标不同 数组元素....

因此,区别在于两个指针之间的元素数量产生了所找到符号的索引,因为表达式str(在将数组str隐式转换为指针之后)指向第一个元素的数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。