http://man7.org/linux/man-pages/man3/getline.3.htmlgetline에서 버퍼의 포인트는 무엇입니까?
두 번째 매개 변수 size_t *n
의 요점을 이해할 수 없습니다.
왜 입력 (예 : 표준 입력)과 출력 (일부 문자 배열) 사이에 버퍼가 필요합니까?
또한 예제에서는 size_t len = 0;
을 제공합니다. 크기 0의 버퍼를 설정하는 것의 의미는 무엇입니까?
http://man7.org/linux/man-pages/man3/getline.3.htmlgetline에서 버퍼의 포인트는 무엇입니까?
두 번째 매개 변수 size_t *n
의 요점을 이해할 수 없습니다.
왜 입력 (예 : 표준 입력)과 출력 (일부 문자 배열) 사이에 버퍼가 필요합니까?
또한 예제에서는 size_t len = 0;
을 제공합니다. 크기 0의 버퍼를 설정하는 것의 의미는 무엇입니까?
getline()
의 요점은받은 버퍼를 재 할당 할 수 있다는 것입니다.
n
의 초기
buffer
공급
size_t n = some_value();
char *buffer = malloc(n);
getline(&buffer, &n, stdin);
하고 발신자를 감안할 때. getline()
이 재 할당되면 buffer
이 메모리를 가리 키도록 변경하고 n
을 변경하여 새 길이를 기록합니다.
분명히, 이것은 realloc()
buffer
에 유효 할 수 있다고 가정하는, 즉 버퍼는 하나 또는 NULL
malloc()
, calloc()
또는 realloc()
의해 리턴 된 값이다.
n
을 0으로 설정하는 중요성 AND buffer
에서 NULL
까지는 getline()
에게 버퍼가 없음을 알립니다. 따라서 아무 것도 읽지 않으면 getline()
이 다시 할당됩니다.
이 모든 내용은 언급하신 링크에 실제로 설명되어 있습니다.
getline()
은 배열이 사용자가 입력 한 행을 포함 할만큼 충분히 큰지 알아야합니다. n
매개 변수에서 배열의 현재 크기를 가져옵니다. 배열의 크기가 충분하지 않으면 필요한 크기로 배열을 다시 할당합니다. 그런 다음 *lineptr
및 *n
을 새 배열과 크기로 업데이트합니다. *n
을 업데이트하면 발신자가 나중에 사용하기 위해 배열의 크기를 알 수 있습니다 (예 : 루프에서 getline()
을 호출하는 경우).
C 포인터는 포인터가 가리키는 배열의 크기를 포함하지 않는다는 것을 기억하십시오. 함수가이를 알아야 할 경우 매개 변수로 전달해야합니다.
두 번째 매개 변수는 읽은 데이터의 크기이며 제공 한 버퍼에서 읽는 데이터의 양 또는 버퍼를 할당 한 버퍼의 양을 알려줍니다. –
@RetiredNinja : 아니요. 할당 된 버퍼의 크기입니다. 반환 값은 데이터의 길이입니다 (마지막에 null 바이트 제외). –