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;
str 是一个字符串,p 也是,我搜索了将字符串打印为整数的结果,发现它是一个未定义的行为,那么它实际上返回了什么?
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)。
推荐阅读
- python - 将嵌套列表转换为数据框python
- sql - Postgres:使用 BETWEEN SYMMETRIC 过滤
- python - 如何捕获 STP 端口类型局部变量的表达式
- python - 简单有趣#159:中间排列
- javascript - Primevue 数据表输入编辑风格
- typescript - 根据用作返回的接口限制数组值
- r - 在 R 中使用 ggplot 以对数刻度绘制 2y 轴
- c# - 在 API 中调用另一个 API 会超时
- html - 无法在 Github 页面上查看 github 项目
- python - 如何编写 ast.NodeTransformer 将 a=1 转换为函数调用 a=variables("a")?