gpt4 book ai didi

c - getline 中的缓冲区有什么意义?

转载 作者:行者123 更新时间:2023-11-30 19:07:37 30 4
gpt4 key购买 nike

http://man7.org/linux/man-pages/man3/getline.3.html

我不明白第二个参数size_t *n的意义。

为什么在输入(例如 stdin)和输出(某些字符数组)之间需要一个缓冲区。

此外,在他们提供的示例中,size_t len = 0;。设置大小为0的缓冲区有何意义?

最佳答案

getline() 的要点是它可以重新分配它接收到的缓冲区。

给定调用者正在执行的操作

 size_t n = some_value();
char *buffer = malloc(n);
getline(&buffer, &n, stdin);

调用者提供长度为n的初始缓冲区。如果getline()重新分配,它会更改buffer,使其指向内存,并更改n以记录新的长度。

显然,这假设在 buffer 上执行 realloc() 是有效的,即该缓冲区是 NULL 或者是值由 malloc()calloc()realloc() 返回。

n设置为零并将buffer设置为NULL的意义在于告诉getline()它有没有给予缓冲。因此,如果 getline() 读取到任何内容,它就会重新分配。

所有这些实际上都在您引用的链接中进行了描述。

关于c - getline 中的缓冲区有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46614690/

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