奇怪的C程序fgets

奇怪的C程序fgets,c,C,我正在浏览一个开源代码库,我看到了以下内容:- 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?buf+BUFSIZE-line给

我正在浏览一个开源代码库,我看到了以下内容:-

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

buf+BUFSIZE-line
给出了缓冲区中的可用空间


这样,
可以是指向第一个空闲字节的滚动指针,下一次读取操作可以将数据放在该字节。

它给出了从
buf
结尾的字符数。你的
//做事
可能的增量

buf+BUFSIZE
是一个
char*
字符,指向分配给
buf
的内存后的第一个字符


buf+BUFSIZE-line
是一个整数,从
line
buf+BUFSIZE
的字符数,因此在循环过程中,可以安全写入
line
而不会溢出
buf
行的字符数可能会增加。因此,此表达式将BUFSIZE的值缩小为已读取文本的大小


这是一个猜测,因为你没有发布循环。

是否有可能在循环中更新buf或行?