Длина строки между указателями

я столкнулся с небольшой проблемой и нуждаюсь в помощи:

Если у меня есть выделенный буфер символов, и у меня есть начальная и конечная точки, которые находятся где-то внутри этого буфера, и я хочу длину между этими двумя точками, как я могу ее найти?

Я.е

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 ответов


просто

length = end - start;

без амперсандов и бросает. С указатель арифметика позволяет эту операцию.


это просто более поздний указатель минус более ранний указатель.

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

есть даже тип ptrdiff_t, который существует для хранения такой длины. Это предусмотрено ' stddef.h'


этот оператор C вычислит разницу между end и start. Просто:

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