指针之间的字符串长度

Jam*_*mes 10 c pointers char

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

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

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.
Run Code Online (Sandbox Code Playgroud)

谢谢

qrd*_*rdl 27

只是

length = end - start;
Run Code Online (Sandbox Code Playgroud)

没有&符号和演员阵容.C指针算术允许此操作.

  • 因为这就是你在C新手时所做的事情.只需添加一个明星或一个&符号,希望这次有效.:-)挂在那里,你会明白的. (9认同)

abe*_*nky 8

它只是后一个指针减去前面的指针.

int length = end - start;
Run Code Online (Sandbox Code Playgroud)

验证和示例代码如下:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 你不需要强制转换为int - 这是非常危险的,因为int是有符号的,所以你最终会用两个有符号的int而不是指针进行数学运算,结果可能与你的期望不同. (4认同)