getline、getwline、getdelim、getwdelim
来自 cppreference.com
< 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
可以为 null,在这种情况下 *n
将被忽略,getline
将分配一个新的缓冲区,就好像使用 malloc 一样。如果 delimiter
的值超出 unsigned char
或 EOF 的范围,则行为未定义。如果 *lineptr
不为 null,则如果 *lineptr
不是可以传递给 free 的指针,或者 *n
小于由 *lineptr
指向的分配内存的大小,则行为未定义。
与 Dynamic Memory TR 中的所有函数一样,只有在实现定义了 __STDC_ALLOC_LIB__ 并且用户在包含 stdio.h
之前将 __STDC_WANT_LIB_EXT2__ 定义为整数常量 1 时,getline
才能保证可用。
内容 |
[编辑] 参数
lineptr | - | 指向初始缓冲区的指针的指针,或指向 null 指针的指针 |
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) |
从文件流中获取宽字符串 (函数) |
分配内存 (函数) |