我正在查看一个开源代码库,看到以下内容:
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
?我正在查看一个开源代码库,看到以下内容:
char *buf;
char *line;
#define BUFSIZE 5000
buf = malloc(BUFSIZE)
line = buf;
while(fgets(line, (unsigned)(buf + BUFSIZE -line), in) != NULL) {
// do stuff
// ....
}
buf + BUFSIZE - line
?这表示从line
到buf
末尾的字符数。你的//do stuff
代码很可能会增加line
。
buf + BUFSIZE
是一个char *
指针,指向为buf
分配的内存之后的第一个字符。
buf + BUFSIZE - line
是一个整数,表示从line
到buf + BUFSIZE
的字符数,因此是可以安全写入line
而不会溢出buf
的字符数。
buf + BUFSIZE - line
表示缓冲区中的剩余空间。
这样,line
可以作为一个滚动指针,指向第一个 可用 字节的位置,下一次读取操作可以将数据放在该位置。
在循环期间,Line可能会被递增。因此,该表达式通过已读取文本的大小缩小了BUFSIZE的值。
这只是一个猜测,因为您没有发布循环代码。