Namespaces
Variants
Actions

getline, getwline, getdelim, getwdelim

From cppreference.com
< c‎ | experimental‎ | dynamic
Defined in header <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
(1) (dynamic memory TR)
ssize_t getwline(wchar_t **lineptr, size_t *n, FILE *stream);
(2) (dynamic memory TR)
ssize_t getdelim(char ** restrict lineptr, size_t * restrict n,
                 int delimiter, FILE *stream);
(3) (dynamic memory TR)
ssize_t getwdelim(wchar_t ** restrict lineptr, size_t * restrict n,
                 wint_t delimiter, FILE * stream);
(4) (dynamic memory TR)
1) Behaves like getdelim(lineptr, n, '\n', stream)
2) Behaves like getwdelim(lineptr, n, L'\n', stream)
3) Reads from the stream stream as if by fgetc , until delimiter is encountered, storing the characters in the buffer of size *n pointed to by *lineptr, automatically increasing its size as if by realloc to fit the entire input, including the delimiter, and adding a null terminator. The pointer returned by realloc is written back into *lineptr. *lineptr may be null, in which case previous value of *n is ignored and getline allocates a new buffer as if by malloc . In any case the final length of the allocated buffer is written to *n. The behavior is undefined if delimiter has a value that is outside the range of unsigned char or EOF .
4) Same as (3), except the characters are read as if by fgetwc and that delimiter must be a valid wchar_t or WEOF.

If *lineptr is not null, the behavior is undefined if *lineptr is not a pointer that can be passed to free or if *n is greater than the size of the allocated memory pointed to by *lineptr. The behavior is also undefined if n is not a valid pointer suitable for writing a value of type size_t .

As all functions from Dynamic Memory TR, getline is only guaranteed to be available if __STDC_ALLOC_LIB__ is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT2__ to the integer constant 1 before including stdio.h.

[edit] Parameters

lineptr - pointer to a pointer to the initial buffer or to a null pointer
n - pointer to the size of the initial buffer
delimiter - the delimiter character
stream - valid input stream, opened by fopen

[edit] Return value

The number of characters stored in the buffer, including the delimiter, but excluding the null terminator.

On error, returns -1 and sets feof or ferror on stream.

[edit] Notes

These functions are identical to their POSIX versions except that it is allowed, but not required to set errno on error.

[edit] Example

Run this code
#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();
}

Output:

Continue? [y] n:

[edit] See also

gets a character string from a file stream
(function) [edit]
(removed in C11)(C11)
reads a character string from stdin
(function) [edit]
(C95)
gets a wide string from a file stream
(function) [edit]
allocates memory
(function) [edit]
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/experimental/dynamic/getline&oldid=183188"

AltStyle によって変換されたページ (->オリジナル) /