getline, getwline, getdelim, getwdelim
|
헤더 파일에 정의됨
<stdio.h>
|
||
| (1) | (동적 메모리 TR) | |
| (2) | (동적 메모리 TR) | |
| (3) | (동적 메모리 TR) | |
| (4) | (동적 메모리 TR) | |
stream
에서
fgetc
를 사용하는 것처럼 읽어서
delimiter
를 만날 때까지,
*lineptr
이 가리키는 크기
*n
의 버퍼에 문자들을 저장합니다.
전체 입력(구분자 포함)을 수용할 수 있도록
realloc
을 사용하는 것처럼 자동으로 크기를 증가시키고 null 종결자를 추가합니다.
realloc
에 의해 반환된 포인터는
*lineptr
에 다시 기록됩니다.
*lineptr
이 null일 수 있으며, 이 경우
*n
의 이전 값은 무시되고
getline
은
malloc
을 사용하는 것처럼 새로운 버퍼를 할당합니다.
어떤 경우든 할당된 버퍼의 최종 길이는
*n
에 기록됩니다.
delimiter
의 값이
unsigned char
범위를 벗어나거나
EOF
가 아닌 경우 동작은 정의되지 않습니다.
만약
*lineptr
이 null이 아니면,
*lineptr
이
free
에 전달될 수 있는 포인터가 아니거나
*n
이
*lineptr
이 가리키는 할당된 메모리의 크기보다 큰 경우 동작은 정의되지 않습니다. 또한
n
이
size_t
타입의 값을 기록하기에 적합한 유효한 포인터가 아닌 경우 동작 역시 정의되지 않습니다.
Dynamic Memory TR의 모든 함수들처럼,
getline
은 구현체가
__STDC_ALLOC_LIB__
를 정의하고, 사용자가
__STDC_WANT_LIB_EXT2__
를 정수 상수
1
으로 정의한 후에만 사용 가능함이 보장됩니다.
stdio.h
를 포함하기 전에.
목차 |
매개변수
| lineptr | - | 초기 버퍼에 대한 포인터 또는 널 포인터에 대한 포인터 |
| n | - | 초기 버퍼의 크기에 대한 포인터 |
| delimiter | - | 구분 문자 |
| stream | - | fopen 으로 열린 유효한 입력 스트림 |
반환값
버퍼에 저장된 문자 수로, 널 종결자를 제외하지만 구분자를 포함합니다.
오류 발생 시,
-
1
을 반환하고
feof
또는
ferror
를
stream
에 설정합니다.
참고 사항
이 함수들은 POSIX 버전 과 동일하지만, 오류 시 errno 를 설정하는 것이 허용되지만 필수는 아니라는 점이 다릅니다.
예제
#ifdef __STDC_ALLOC_LIB__ #define __STDC_WANT_LIB_EXT2__ 1 #else #define _POSIX_C_SOURCE 200809L #endif #include <stdio.h> #include <stdlib.h> void get_y_or_n(void) { char *response = NULL; size_t len; printf("Continue? [y] n: "); if((getline(&response, &len, stdin) < 0) || (len && response[0] == 'n')) { free(response); exit(0); } free(response); return; } int main(void) { get_y_or_n(); }
출력:
Continue? [y] n:
참고 항목
|
파일 스트림에서 문자열을 읽어옴
(함수) |
|
|
(C11에서 제거됨)
(C11)
|
stdin
에서 문자열을 읽어옴
(함수) |
|
(C95)
|
파일 스트림에서 와이드 문자열을 읽어옴
(함수) |
|
메모리를 할당함
(함수) |