2016-08-19 5 views
0

Also habe ich einige der gleichen Fragen durchsucht und eine funktionierende Antwort gefunden. Ich habe mich nur gefragt, ob jemand mir die letzte Zeile des Codes aus dieser Antwort erklären können:Re: Lesen einer Zeile und Verwendung von Realloc in C

Read text from a file and realloc when needed

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

Dank!

+0

Suche nach "c Zeigerarithmetik". –

+0

BTW, gibt es einfachere Möglichkeiten zum Implementieren einer Lese-und-Realloc-Schleife, z.B. [so] (http://codereview.stackexchange.com/a/137864). –

Antwort

2

Der Writer versucht, in die zweite Hälfte des Arrays zu lesen. Um dies zu tun, muss die Basisadresse höher sein. Daher das erste Argument linebuffer + (maxlinelen/2 - 1). Es nimmt die Basisadresse des Arrays und fügt ihm die halbe Länge des Arrays hinzu.

Da das Array jedoch halb so lang ist, halbiert der Writer die Größe des Arrays. Daher das zweite Argument, maxlinelen/2 + 1.

enter image description here

0

Wenn er die Kapazität verdoppeln erste Hälfte der linebuffer ist füllen, die andere Hälfte ist leer. Aus diesem Grund schreibt er Daten von der Mitte der linebuffer. Er überschreibt also nicht die erste Hälfte des linebuffer

Verwandte Themen