getline中第二个参数的作用是什么?

W. *_*Zhu 4 c getline

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

int main(void)
{
    char* buffer = malloc(100 * sizeof(char));
    size_t n = 3;

    getline(&buffer, &n, stdin);
    printf("%s\n", buffer);
    free(buffer);
}
Run Code Online (Sandbox Code Playgroud)

getline我认为,中的第二个参数size_t *n是限制读取的字符数。但是当我尝试使用更大的输入时,它仍然读取所有输入。我在手册页和网上进行了搜索,但找不到答案。有人能为我解释一下吗?

Dav*_*nco 5

来自getline手册页

给定ssize_t getline(char **lineptr, size_t *n, FILE *stream);

如果 *lineptr 为 NULL,则 getline() 将分配一个缓冲区来存储该行,该缓冲区应由用户程序释放。(在这种情况下,*n 中的值将被忽略。)

或者,在调用 getline() 之前,*lineptr 可以包含指向 malloc(3) 分配的缓冲区 *n 字节大小的指针。如果缓冲区不够大,无法容纳该行,则 getline() 使用 realloc(3) 调整其大小,并根据需要更新 *lineptr 和 *n。

强调我的。简而言之,n进行了更新以确保线路适合。