首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strchr问题

strchr问题
EN

Stack Overflow用户
提问于 2010-12-12 08:48:34
回答 3查看 716关注 0票数 1

我不明白为什么下面这段C代码不能工作:

代码语言:javascript
复制
int obtainStringLength(char* str, char c1, char c2) {
    char* firstOcurrence = strchr(str, c1);
    char* endOcurrence = strchr(str, c2);
    return 2+(endOcurrence - firstOcurrence) / sizeof(char*);
}

其思想是找出c1c2之间有多少个字符

代码语言:javascript
复制
printf("%d\n", obtainStringLength("abc def ghi", 'a', 'i')); //should yield 11

不幸的是,这总是打印% 1。有什么问题吗?strchr不应该像C#的string.IndexOf()那样工作吗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-12 08:51:10

是否按sizeof(char*)除法?这是不正确的-减去两个指针的结果是一个与值的数量相对应的数值(ptrdiff_t),而不是一个指针或地址差。

在计算长度时也存在偏差1的错误。所以最后一行应该类似于:

代码语言:javascript
复制
return 1 + (endOcurrence - firstOcurrence);
票数 6
EN

Stack Overflow用户

发布于 2010-12-12 08:52:11

由于不理解指针算法,您的return语句有几个问题。

指针减法已经除以元素大小,而且char*的类型也是错误的。

并且您应该添加1,而不是2。

票数 2
EN

Stack Overflow用户

发布于 2010-12-12 08:51:21

否,strchr()返回正在查找的字符的指针(地址),如果未找到该字符,则返回NULL。

这与IndexOf()非常不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4419840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档