2016-08-19 1 views
0

Итак, я просмотрел некоторые из тех же вопросов и нашел рабочий ответ. Мне было просто интересно, если кто-то может объяснить мне последнюю строку кода из этого ответа:Re: Чтение строки и использование realloc в C

Read text from a file and realloc when needed

fgets(linebuffer + (maxlinelen/2 - 1), maxlinelen/2 + 1, fp); //this line 

Большое спасибо!

+0

Поиск "с указателем арифметика". –

+0

Кстати, существуют более простые способы реализации цикла считывания и повторного вызова, например. [как это] (http://codereview.stackexchange.com/a/137864). –

ответ

2

Писатель пытается прочитать во второй половине массива. Для этого базовый адрес должен быть выше. Отсюда первый аргумент linebuffer + (maxlinelen/2 - 1). Он берет базовый адрес массива и добавляет к нему половину длины массива.

Но поскольку массив имеет половину длины, автор уменьшает размер массива. Следовательно, второй аргумент, maxlinelen/2 + 1.

enter image description here

0

Когда он удваивает емкость, первая половина linebuffer заполняется, другая половина пуста. Из-за этого он пишет данные, начиная с середины linebuffer. Таким образом, он не перезаписывает до первой половины linebuffer

Смежные вопросы