Namespaces
Variants

getline, getwline, getdelim, getwdelim

From cppreference.net
헤더 파일에 정의됨 <stdio.h>
ssize_t getline ( char ** lineptr, size_t * n, FILE * stream ) ;
(1) (동적 메모리 TR)
ssize_t getwline ( wchar_t ** lineptr, size_t * n, FILE * stream ) ;
(2) (동적 메모리 TR)
ssize_t getdelim ( char ** restrict lineptr, size_t * restrict n,
int delimiter, FILE * stream ) ;
(3) (동적 메모리 TR)
ssize_t getwdelim ( wchar_t ** restrict lineptr, size_t * restrict n,
wint_t delimiter, FILE * stream ) ;
(4) (동적 메모리 TR)
1) 다음과 같이 동작합니다 getdelim ( lineptr, n, ' \n ' , stream )
2) 다음과 같이 동작합니다 getwdelim ( lineptr, n, L ' \n ' , stream )
3) stream 에서 fgetc 를 사용하는 것처럼 읽어서 delimiter 를 만날 때까지, *lineptr 이 가리키는 크기 *n 의 버퍼에 문자들을 저장합니다. 전체 입력(구분자 포함)을 수용할 수 있도록 realloc 을 사용하는 것처럼 자동으로 크기를 증가시키고 null 종결자를 추가합니다. realloc 에 의해 반환된 포인터는 *lineptr 에 다시 기록됩니다. *lineptr 이 null일 수 있으며, 이 경우 *n 의 이전 값은 무시되고 getline malloc 을 사용하는 것처럼 새로운 버퍼를 할당합니다. 어떤 경우든 할당된 버퍼의 최종 길이는 *n 에 기록됩니다. delimiter 의 값이 unsigned char 범위를 벗어나거나 EOF 가 아닌 경우 동작은 정의되지 않습니다.
4) (3) 과 동일하지만, 문자들은 fgetwc 에 의해 읽히는 것처럼 처리되며, delimiter 는 유효한 wchar_t 또는 WEOF 여야 합니다.

만약 *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)
파일 스트림에서 와이드 문자열을 읽어옴
(함수)
메모리를 할당함
(함수)