странная программа на C - PullRequest
3 голосов
/ 27 марта 2011

Я просматривал кодовую базу с открытым исходным кодом и вижу следующее: -

char *buf;
char *line;
#define BUFSIZE 5000

buf = malloc(BUFSIZE)
line = buf;

while(fgets(line, (unsigned)(buf + BUFSIZE -line), in) != NULL) {
    // do stuff
    // ....
}

Почему второй аргумент для fgets задан как buf + BUFSIZE - line?

Ответы [ 3 ]

8 голосов
/ 27 марта 2011

Это дает количество символов от line до buf.Ваши //do stuff вероятные приращения line

buf + BUFSIZE являются char *, указывающими на первый символ после памяти, выделенной для buf

buf + BUFSIZE - line представляет собой целое число символов от line до buf + BUFSIZE - и, следовательно, количество символов, которое вы можете безопасно записать в line без переполнения buf

5 голосов
/ 27 марта 2011

buf + BUFSIZE - line дает свободное место в буфере.

Таким образом, line может быть указателем прокрутки, указывающим на первый свободный байт, куда следующая операция чтения может поместить данные.

2 голосов
/ 27 марта 2011

Линия, вероятно, будет увеличиваться во время цикла. Таким образом, это выражение уменьшает значение BUFSIZE до размера уже прочитанного текста.

Это предположение, так как вы не опубликовали цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...