奇怪的C程序fgets

3

我正在查看一个开源代码库,看到以下内容:

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

1
循环内部是否偶然更新了buf或line的值? - Ronny Brendel
3个回答

8

这表示从linebuf末尾的字符数。你的//do stuff代码很可能会增加line

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

buf + BUFSIZE - line是一个整数,表示从linebuf + BUFSIZE的字符数,因此是可以安全写入line而不会溢出buf的字符数。


5

buf + BUFSIZE - line 表示缓冲区中的剩余空间。

这样,line 可以作为一个滚动指针,指向第一个 可用 字节的位置,下一次读取操作可以将数据放在该位置。


2

在循环期间,Line可能会被递增。因此,该表达式通过已读取文本的大小缩小了BUFSIZE的值。

这只是一个猜测,因为您没有发布循环代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接