Несмотря на то, что они объявляются по-разному, как allocp, так и allocbuf являются массивами символов (char *) и эффективно выделяют точки на первом символе буфера после инициализации и после прохождения тела if, к одному и тому же адрес + количество выделенных байтов, и это число увеличивается с каждым новым циклом в теле «если». Подводя итог, он указывает на первый свободный символ в буфере.
Строка «if», в которой вы застряли, предназначена для проверки, достаточно ли места для размещения n символов в allocbuf, статическом буфере.
Эту строку можно разложить следующим образом:
char* static_buffer_beginning = allocbuf;
char* static_buffer_ending = static_buffer_beginning + MAXLINE;
int nb_chars_still_available = static_buffer_ending - allocp;
if (nb_chars_still_available >= n) {
Меня просто смущает "ALLOCSIZE", который появляется в вашем коде: какова его ценность, откуда она взялась ?! Я предполагаю, что это опечатка или что-то в этом роде, и что ее значение равно MAXLINE, но хотелось бы быть уверенным, что не даст вам неправильный ответ.