gpt4 book ai didi

c - 当我为行缓冲分配内存空间并且流的行的字节数多于缓冲区空间时会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 16:07:46 37 4
gpt4 key购买 nike

此代码仅分配 10 个字节用于行缓冲,并读取第一行有 45 个字节的文件。当它运行时,程序会读取所有 45 个字节,而不仅仅是我预期的前 10 个字节,那么 setvbuf 实际上做了什么?

#include <stdio.h>
#include <stdlib.h>

int main() {
FILE *tst;
tst = fopen("x.log","r");

char *buff = malloc(10); //Just 10 characters
setvbuf(tst, buff, _IOLBF, 10);

char *mystring = malloc(45); //First line of x.log is 45 characters exactly
if ( fgets (mystring, 45, tst) != NULL )
puts(mystring);
fclose (tst);
free(buff);
}

最佳答案

fgets() 在内部使用 getc(),一次读取一个字符,直到它读取一个换行符或达到给定的限制。每当 getc() 到达 I/O 缓冲区的末尾时,它将重新填充缓冲区,因此它不受 setvbuf() 设置的大小的限制。设置较小的缓冲区大小只会降低效率,但不会改变可读取的数据量。

关于c - 当我为行缓冲分配内存空间并且流的行的字节数多于缓冲区空间时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605543/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com