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

时间:2016-12-17 07:49:14

标签: 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);
}

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

1 个答案:

答案 0 :(得分:4)

来自getline man pages

给定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以确保线条适合。