getline, getwline, getdelim, getwdelim
来自 cppreference.cn
< c | experimental | dynamic
定义于头文件 <stdio.h> |
||
(1) | (动态内存 TR) | |
(2) | (动态内存 TR) | |
(3) | (动态内存 TR) | |
(4) | (动态内存 TR) | |
1) 行为如同 getdelim(lineptr, n, '\n', stream)
2) 行为如同 getwdelim(lineptr, n, L'\n', stream)
3) 从流
stream
中读取,如同使用 fgetc,直到遇到 delimiter
,将字符存储在 *lineptr
指向的大小为 *n
的缓冲区中,并自动增加其大小,如同使用 realloc 以适应整个输入,包括分隔符,并添加空终止符。*lineptr
可以为空,在这种情况下,*n
将被忽略,并且 getline
将分配一个新的缓冲区,如同使用 malloc。如果 delimiter
的值超出 unsigned char
或 EOF 的范围,则行为未定义。如果 *lineptr
不为空,则如果 *lineptr
不是可以传递给 free 的指针,或者如果 *n
小于 *lineptr
指向的已分配内存的大小,则行为未定义
与动态内存 TR 中的所有函数一样,仅当实现定义了 __STDC_ALLOC_LIB__ 并且用户在包含 stdio.h
之前将 __STDC_WANT_LIB_EXT2__ 定义为整数常量 1 时,才能保证 getline
可用。
目录 |
[编辑] 参数
lineptr | - | 指向初始缓冲区或空指针的指针的指针 |
n | - | 指向初始缓冲区大小的指针 |
delimiter | - | 分隔符字符 |
stream | - | 有效的输入流,由 fopen 打开 |
[编辑] 返回值
存储在缓冲区中的字符数,包括分隔符,但不包括空终止符。
在错误时,返回 -1 并在 stream
上设置 feof 或 ferror。
[编辑] 注意
这些函数与其 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) |
从文件流中获取宽字符串 (函数) |
分配内存 (函数) |