getline, getwline, getdelim, getwdelim
|
定义于头文件
<stdio.h>
|
||
| (1) | (动态内存 TR) | |
| (2) | (动态内存 TR) | |
| (3) | (动态内存 TR) | |
| (4) | (动态内存 TR) | |
stream
中读取字符(操作类似
fgetc
),直至遇到
delimiter
,将字符存储到大小为
*n
的缓冲区(由
*lineptr
指向),并自动通过
realloc
扩展缓冲区以容纳包括分隔符在内的完整输入内容,同时添加空终止符。
realloc
返回的指针会被写回
*lineptr
。若
*lineptr
为空指针,则忽略
*n
的先前值,
getline
会通过
malloc
分配新缓冲区。无论何种情况,最终分配的缓冲区长度都会被写入
*n
。若
delimiter
的值超出
unsigned char
或
EOF
的范围,则行为未定义。
如果
*lineptr
不为空,当
*lineptr
不是可传递给
free
的指针,或当
*n
大于
*lineptr
所指向的已分配内存大小时,其行为是未定义的。如果
n
不是适合写入
size_t
类型值的有效指针,其行为同样未定义。
与动态内存技术报告中的所有函数一样,只有当实现定义了
__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)
|
从文件流获取宽字符串
(函数) |
|
分配内存
(函数) |