奇怪的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或行?