10

我遇到了一个小问题,需要一些帮助:

如果我有一个分配的字符缓冲区,并且我有一个起点和终点位于该缓冲区内的某处,并且我想要这两个点之间的长度,我该如何找到它?

IE

char * buf; //malloc of 100 chars
char * start; // some point in buff
char * end; // some point after start in buf

int length = &end-&start? or &start-&end? 
//How to grab the length between these two points.

谢谢

4

4 回答 4

27

只是

length = end - start;

没有&符号和演员表。C 指针算法允许这种操作。

于 2009-07-06T13:02:34.063 回答
8

它只是后面的指针减去前面的指针。

int length = end - start;

验证和示例代码如下:

int main(int argc, char* argv[])
{
    char buffer[] = "Its a small world after all";
    char* start = buffer+6;  // "s" in SMALL
    char* end   = buffer+16; // "d" in WORLD

    int length = end - start;

    printf("Start is: %c\n", *start);
    printf("End is: %c\n", *end);
    printf("Length is: %d\n", length);
}
于 2009-07-06T13:02:19.320 回答
1

甚至还有一种类型,ptrdiff_t,它的存在就是为了保持这样的长度。它由“stddef.h”提供

于 2009-08-14T22:49:52.490 回答
0

这个 C 语句将计算 end 和 start 之间的差异。简单地:

int length = (int)(end - start);
于 2009-07-06T13:08:47.023 回答