回复:在C中读取一行并使用realloc

回复:在C中读取一行并使用realloc,c,file,fgets,realloc,C,File,Fgets,Realloc,所以我浏览了一些相同的问题,找到了一个有效的答案。我只是想知道是否有人能向我解释这个答案的最后一行代码: 多谢各位 当容量加倍时,linebuffer的前半部分已满,另一半为空。因此,它从行缓冲区的中间开始写入数据。因此,他不会覆盖linebuffer的前半部分,当容量加倍时linebuffer的前半部分已满,另一半为空。因此,它从行缓冲区的中间开始写入数据。因此,他不会覆盖写入程序试图读入数组后半部分的行缓冲区的前半部分。要做到这一点,基址必须更高。因此第一个参数linebuffer+(ma

所以我浏览了一些相同的问题,找到了一个有效的答案。我只是想知道是否有人能向我解释这个答案的最后一行代码:


多谢各位

当容量加倍时,
linebuffer
的前半部分已满,另一半为空。因此,它从
行缓冲区的中间开始写入数据。因此,他不会覆盖
linebuffer

的前半部分,当容量加倍时
linebuffer
的前半部分已满,另一半为空。因此,它从
行缓冲区的中间开始写入数据。因此,他不会覆盖写入程序试图读入数组后半部分的
行缓冲区的前半部分。要做到这一点,基址必须更高。因此第一个参数
linebuffer+(maxlinelen/2-1)
。它获取数组的基址,并将数组长度的一半添加到其中

但是由于数组的长度是原来的一半,所以写入程序将数组的大小减半。因此出现了第二个参数,
maxlinelen/2+1


写入程序正在尝试读取数组的后半部分。要做到这一点,基址必须更高。因此第一个参数
linebuffer+(maxlinelen/2-1)
。它获取数组的基址,并将数组长度的一半添加到其中

但是由于数组的长度是原来的一半,所以写入程序将数组的大小减半。因此出现了第二个参数,
maxlinelen/2+1


搜索“c指针算法”。顺便说一句,有更简单的方法实现读取和realloc循环,例如。搜索“c指针算法”。顺便说一句,有更简单的方法实现读取和realloc循环,例如。
fgets(linebuffer + (maxlinelen/2 - 1), maxlinelen/2 + 1, fp); //this line