我不明白为什么下面这段C代码不能工作:
int obtainStringLength(char* str, char c1, char c2) {
char* firstOcurrence = strchr(str, c1);
char* endOcurrence = strchr(str, c2);
return 2+(endOcurrence - firstOcurrence) / sizeof(char*);
}其思想是找出c1和c2之间有多少个字符
printf("%d\n", obtainStringLength("abc def ghi", 'a', 'i')); //should yield 11不幸的是,这总是打印% 1。有什么问题吗?strchr不应该像C#的string.IndexOf()那样工作吗
发布于 2010-12-12 08:51:10
是否按sizeof(char*)除法?这是不正确的-减去两个指针的结果是一个与值的数量相对应的数值(ptrdiff_t),而不是一个指针或地址差。
在计算长度时也存在偏差1的错误。所以最后一行应该类似于:
return 1 + (endOcurrence - firstOcurrence);发布于 2010-12-12 08:52:11
由于不理解指针算法,您的return语句有几个问题。
指针减法已经除以元素大小,而且char*的类型也是错误的。
并且您应该添加1,而不是2。
发布于 2010-12-12 08:51:21
否,strchr()返回正在查找的字符的指针(地址),如果未找到该字符,则返回NULL。
这与IndexOf()非常不同。
https://stackoverflow.com/questions/4419840
复制相似问题