#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是限制读取的字符数。但是当我尝试使用更大的输入时,它仍然读取所有输入。我在手册页和网上进行了搜索,但找不到答案。有人能为我解释一下吗?
来自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进行了更新以确保线路适合。