【问题标题】:String length between pointers指针之间的字符串长度
【发布时间】:2010-11-08 09:07:31
【问题描述】:

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

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

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.

谢谢

【问题讨论】:

    标签: c pointers char


    【解决方案1】:

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

    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);
    }
    

    【讨论】:

    • 您不需要强制转换为 int - 这是非常危险的,因为 int 是有符号的,因此您最终将使用两个有符号整数而不是指针进行数学运算,结果可能与您的预期不同。
    • 我不认为 qrdl 是正确的。两个有符号整数?哪两个有符号整数?对减法的结果进行强制转换,而不是被减去的两个指针。指针减法的结果是有符号的,非常正确。如果 end 实际上在 start 之前,那么结果应该是否定的,对吧?
    【解决方案2】:

    只是

    length = end - start;
    

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

    【讨论】:

    • 刚试了一下,效果很好,不知道为什么我开始往里面扔&。谢谢
    • 因为这是您刚接触 C 时所做的事情。只需添加一个星号或一个 & 符号,并希望这次能正常工作。 :-) 坚持下去,你会明白的。
    • 我从来没有这样做过。但我想那是因为我之前有使用 peek() 和 poke() 的经验。
    【解决方案3】:

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

    int length = (int)(end - start);
    

    【讨论】:

      【解决方案4】:

      甚至还有一个类型,ptrdiff_t,可以保持这样的长度。它由'stddef.h'提供

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 2022-11-14
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        相关资源
        最近更新 更多