c标准库
前言
学习c语言十几年了,却从来没有完整的将c标准库看一看,我想在这一点上我是欠缺的。作为一个技术人员,无论什么时候都不能忘记自己最擅长的技能,这次借一个偶然的契机,翻一翻c标准库,希望以后自己在技术上越来越牛。
说明
c++库和c库包含相同的结构体的定义,其区别主要如下:
- 每个头文件与c语言版本具有相同的名称,但是带有“c”前缀,没有扩展文件名。例如:c语言头文件<stdio.h>的c++等价头文件为。
- 库的每个元素都在std空间中定义。
本文档的示例中,使用c风格的版本,要使用c++的版本替换成相应的头文件就好。
在c++版本实现中也有一些特定的区别:
- wchar_t, char16_t, char32_t 和 bool是c++中的基本类型,因此不会在c版本中出现,这同样适用于<iso646.h>中的宏,因为它们是c++中的关键字。
- 以下函数的声明中有与其参数常量相关的更改:strchr、strpbrk、strrchr、strstrstr、memchr。
- 定义在<cstdlib>中的atexit、exit、abort函数在c++中的行为有所增加。
- 有些函数的重载版本提供了作为参数的附加类型和相同的语义,例如cmath头文件中函数的float和long double版本,或者abs和div的long版本。
c++98包含c90标准中的库;
c++11包含c99标准中描述的c库;
2011 ISO标准的其他介绍与c++不兼容。
说明:本文主要对c99(即c++11)库进行描述。
<cassert><assert.h>
说明
该文件中定义了一组宏函数作为标准调试工具。对应的宏函数为assert。
函数
函数assert
void assert(int expression);
如果表达式为0,则会向标准错误设备写入一条消息,并调用abort,终止程序的额执行。
如果在#include<assert.h>时,已经定义了名为ndebug的宏,则禁用此宏。因此可以在调试时使用断言,但是在生产版本中通过如下行为禁用这些断言调用:
#define NDEBUG
调用示例:
#include <stdio.h> /* printf */
#include <assert.h> /* assert */
void print_number(int* myInt) {
assert (myInt!=NULL);
printf ("%d\n",*myInt);
}
int main (){
int a=10;
int * b = NULL;
int * c = NULL;
b=&a;
print_number (b);
print_number (c);
return 0;
}
<cctype>/<ctype.h>
说明
此头文件声明了一组用于分类和转换单个字符的函数。
函数
isalnum
int isalnum ( int c );
检查c是十进制数字还是大小写字母。如果为假返回0,否则返回其它值。
isalpha
int isalpha ( int c );
检查c是否为字母。为假返回0,否则返回其它值。
isblank
int isblank ( int c );
检查c是否是空白字符。为假返回0,否则返回其它值。
iscntrl
int iscntrl ( int c );
检查c是否是控制字符。为假返回0,否则返回其它值。
isdigit
int isdigit ( int c );
检查c是否是十进制字符。为假返回0,否则返回其它值。
isgraph
int isgraph ( int c );
检查c是否有图形表示法。带有图形表示法的字符是除了空白字符(比如 ’ ')以外的所有可打印的字符。为假返回0,否则返回其它值。
islower
int islower ( int c );
检查c是否是小写字母。为假返回0,否则返回其它值。
isprint
int isprint ( int c );
检查c是否是可打印字符。为假返回0,否则返回其它值。
ispunct
int ispunct ( int c );
检查c是否是标点符号。为假返回0,否则返回其它值。
isspace
int isspace ( int c );
检查c是否是空格。为假返回0,否则返回其它值。
isupper
int isupper ( int c );
检查c是否是大写字母。为假返回0,否则返回其它值。
isxdigit
int isxdigit ( int c );
检查c是否是十六进制数字。为假返回0,否则返回其它值。
tolower
int tolower ( int c );
将c转换成小写字符。
toupper
int toupper ( int c );
将c转换成大写字符。
<cerrno>/<errno.h>
该文件中主要定义了如下宏:
- errno 上次的错误号;
- 该宏可以由程序读和写。
<cfloat>/<float.h>
含了一组与浮点值相关的依赖于平台的常量。
宏 | 描述 |
FLT_ROUNDS | 定义浮点加法的舍入模式,它可以是下列任何一个值: -1 表示无法确定 ; 0 表示趋向于零; 1表示去最近的值; 2趋向于正无穷; 3趋向于负无穷。 |
FLT_RADIX | 此宏定义了指数表示的基数。基数2表示二进制,基数10表示十进制,基数16表示十六进制。 |
FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG | 定义了FLT_RADIX基数中的位数 |
FLT_DIG 6 DBL_DIG 10 LDBL_DIG 10 | 定义了舍入后不会改变表示的十进制数字的最大值。 |
FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP | 定义了基数为FLT_RADIX时的指数的最小负整数值。 |
FLT_MIN_10_EXP -37 DBL_MIN_10_EXP -37 LDBL_MIN_10_EXP -37 | 定义基数为10时指数的最小负整数值。 |
FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP | 定义基数为FLT_RADIX时指数的最大整数值。 |
FLT_MAX_10_EXP +37 DBL_MAX_10_EXP +37 LDBL_MAX_10_EXP +37 | 定义基数为10时的指数的最大整数值。 |
FLT_MAX 1E+37 DBL_MAX 1E+37 LDBL_MAX 1E+37 | 定义最大的有限浮点数。 |
FLT_EPSILON 1E-5 DBL_EPSILON 1E-9 LDBL_EPSILON 1E-9 | 定义可表示的最小有效数字。 |
FLT_MIN 1E-37 DBL_MIN 1E-37 LDBL_MIN 1E-37 | 定义最小的浮点数。 |
<ciso646>/<iso646.h>
定义运算符相关的宏。
宏 | 对应操作符 |
and | && |
and_eq | &= |
bitand | & |
bitor | | |
compl | ~ |
not | ! |
not_eq | != |
or | |
or_eq | |= |
xor | ^ |
xor_eq | ^= |
在c++中有相应的保留字,因此可以不需要此头文件。
<climits>/<limits.h>
该头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制各种类型的变量。即变量不能存储任何超出这些限制的值。
宏 | 描述 | 值 |
CHAR_BIT | char类型中的比特数 | 8 |
SCHAR_MIN | 有符号字符的最小值 | -127 |
SCHAR_MAX | 有符号字符的最大值 | 127 |
UCHAR_MAX无符号字符的最大值 | 255 | |
CHAR_MIN | char类型的最小值 | SCHAR_MIN或者0 |
CHAR_MAX | char类型的最大值 | SCHAR_MAX或者UCHAR_MAX |
MB_LEN_MAX | 多字节字符中的最大字节数 | 1 |
SHRT_MIN | 短整型的最小值 | -32767(-2^15+1) |
SHRT_MAX | 短整型的最大值 | 32767(2^15+1) |
USHRT_MAX | 无符号短整型的最大值 | 65535(2^16-1) |
INT_MIN | int类型的最小值 | -32767(-2^15+1) |
INT_MAX | int类型的最大值 | 32767(2^15+1) |
UINT_MAX | 无符号int类型的最大值 | 65535(2^16-1) |
LONG_MIN | 长整型的最小值 | -2147483647 (-2^31+1) |
LONG_MAX | 长整型的最大值 | 2147483647 (2^31+1) |
ULONG_MAX | 无符号长整型的最大值 | 4294967295 (2^32-1) |
LLONG_MIN | long long int的最小值 | -9223372036854775807 (-2^63+1) |
LLONG_MIN | long long int的最大值 | 9223372036854775807 (2^63+1) |
ULLONG_MAX | 无符号long long int的最大值 | 18446744073709551615 (2^64-1) |
<clocale>/<locale.h>
c语言支持特定于本地化的设置。例如特定于区域性的日期格式或特定于国家的货币符号。
每个系统和特定的编译器至少要提供两种区域设置选择:
- "c"区域设置是最小区域设置。
- 系统的默认区域设置由运行应用程序的环境提供区域设置配置。
在此头文件中声明了结构提lconv以及函数setlocale和localeconv,以及配合它们使用的一些宏。
结构体lconv
此结构体保存写入数值(货币值和非货币值)的格式信息。函数localconv返回此类型的对象。
该结构体包含的成员如下:
typedef struct {
char *decimal_point;//用于非货币值的小数点字符
char *thousands_sep;//用于非货币值的千位分隔符
char *grouping;//一个表示非货币量中每组数字大小的字符串。每个字符代表一个整数值,每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组
char *int_curr_symbol;//国际货币符号使用的字符串。前三个字符是由 ISO 4217:1987 指定的,第四个字符用于分隔货币符号和货币量
char *currency_symbol;//用于货币的本地符号
char *mon_decimal_point;//用于货币值的小数点字符
char *mon_thousands_sep;//用于货币值的千位分隔符
char *mon_grouping;//一个表示货币值中每组数字大小的字符串。每个字符代表一个整数值,每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组
char *positive_sign;//用于正货币值的字符
char *negative_sign;//用于负货币值的字符
char int_frac_digits;//国际货币值中小数点后要显示的位数
char frac_digits;//货币值中小数点后要显示的位数
char p_cs_precedes;//如果等于 1,则 currency_symbol 出现在正货币值之前。如果等于 0,则 currency_symbol 出现在正货币值之后
char p_sep_by_space;//如果等于 1,则 currency_symbol 和正货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和正货币值之间不使用空格分隔
char n_cs_precedes;//如果等于 1,则 currency_symbol 出现在负货币值之前。如果等于 0,则 currency_symbol 出现在负货币值之后
char n_sep_by_space;//如果等于 1,则 currency_symbol 和负货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和负货币值之间不使用空格分隔
char p_sign_posn;//表示正货币值中正号的位置
char n_sign_posn;//表示负货币值中负号的位置
char int_p_cs_precedes;//p_cs_precedes的国际格式
char int_n_cs_precedes;//n_cs_precedes的国际格式
char int_p_sep_by_space;//p_sep_by_space的国际格式
char int_n_sep_by_space;//n_sep_by_space的国际格式
char int_p_sign_posn;//p_sign_posn的国际格式
char int_n_sign_posn;//n_sign_posn的国际格式
} lconv
函数setlocale
char* setlocale (int category, const char* locale);
设置或读取地域化的信息。
函数localeconv
struct lconv* localeconv (void);
设置或读取地域化信息,会返回一个lconv结构类型的对象。
<cmath>/<math.h>
定义了常用的数学操作相关的函数。
如下:
- cos
- sin
- tan
- acos
- asin
- atan
- atan2
- cosh
- sinh
- tanh
- acosh
- asinh
- atanh
- exp
- frexp
- ldexp
- log
- log10
- modf
- exp2
- expm1
- ilogb
- log1p
- log2
- logb
- scalbn
- scalbln
- pow
- sqrt
- cbrt
- hypot
- erf
- erfc
- tgamma
- lgamma
- ceil
- floor
- fmod
- trunc
- round
- lround
- llround
- rint
- lrint
- nearbyint
- remainder
- remquo
- copysign
- nan
- nextafter
- nexttoward
- fdim
- fmax
- fmin
- fabs
- abs
- fma
- fpclassify
- isfinite
- isinf
- isnan
- isnormal
- signbit
- isgreater
- isgreaterequal
- isless
- islessequal
- islessgreater
- isunordered
- math_errhandling
- INFINITY
- NAN
- HUGE_VAL
- HUGE_VALF
- HUGE_VALL
<csetjmp>/<setjmp.h>
定义了宏setjmp、函数longjmp以及变量类型jmp_buf,用来实现远程跳转。
jmp_buf类型
用来存储宏setjmp和longjmp之间的环境相关的信息。在调用setjmp时存储,然后在longjmp时恢复
setjmp
int setjmp (jmp_buf env);
此宏用来把当前的环境保存在变量enviroment中,以便longjmp调用时使用。
longjmp
void longjmp (jmp_buf env, int val);
该函数恢复最近一次调用setjmp宏时保存的环境,就jmp_buf参数的设置是由之前调用的额setjmp生成的。
<csignal>/<signal.h>
处理信号的c标准库。包括sig_atomic_t类型,信号处理设置函数signal,信号生成函数raise。
sig_atomic_t类型
int类型,信号处理程序中作为变量使用。它是一个对象的整数类型,该对象可以作为一个原子实体访问,即使存在异步信号时,该对象可以作为一个原子实体访问。
signal
注册信号处理函数。
raise
生成一个信号。
宏类型
类型 | 宏 | 信号 |
int (信号) | SIGABRT | 程序异常终止 |
int (信号) | SIGFPE | 算术运算出错,如除数为0或者溢出 |
int (信号) | SIGILL | 非法函数映像,如非法指令 |
int (信号) | SIGINT | 中断信号,如ctrl-C |
int (信号) | SIGSEGV | 非法访问存储器,如访问不存在的内存单元 |
int (信号) | SIGTERM | 发送给本程序的终止请求信号 |
函数(handlers) | SIG_DFL | 默认的信号处理程序 |
函数(handlers) | SIG_ERR | 特殊返回值表示一个信号错误 |
函数(handlers) | SIG_IGN | 忽略信号 |
<cstdarg>/<stdarg.h>
该头文件定义了一个变量类型va_list和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。
可变参数的函数在参数列表的末尾使用省略号(…)定义。
例如:
返回类型 函数名称(参数1, ...)
要访问附加的参数通过宏va_start,va_arg,va_end来实现。
库变量va_list
适用于va_start()、va_arg()和va_end()这三个宏存储信息的类型。
宏库
宏 | 描述 |
void va_start (va_list ap, last_arg) | 此宏初始化ap变量,与va_arg和va_end一起使用。lase_arg是最后一个传递给函数的已知的固定参数,即省略号之前的参数,此参数不应为引用类型。 |
type va_arg(va_list ap, type) | 此宏检索函数参数列表中类型为type的下一个参数。 |
void va_end(va_list ap) | 此宏允许使用va_start宏带有的可变参数的函数返回。如果在从函数返回之前没有调用va_end,则结果为未定义。 |
void va_copy (va_list dest, va_list src) | 拷贝va_list src的内容到dest |
<cstdbool>/<stdbool.h>
定义true和false的宏。
<cstddef>/<stddef.h>
该头文件定义各种变量类型和宏。
类型
类型 | 含义 |
ptrdiff_t | 有符号整数类型,它是两个指针相减的结果 |
size_t | 无符号整数类型,它是sizeof关键字的结果 |
max_align_t | 对其类型大小 |
nullptr_t | 空指针类型 |
宏函数
类型 | 含义 |
offset | 返回结一个构体成员的偏移量 |
宏
类型 | 含义 |
NULL | 空指针 |
<cstdint>/<stdint.h>
此文件是类型支持库的一部分,提供定宽整数类型和部分c数值极限接口。
类型
int8_t uint8_t
int16_t uint16_t
int32_t uint32_t
int64_t uint64_t
分别为宽度恰为 8 、 16 、 32 和 64 位的有/无符号整数类型
无填充位并对负值使用补码(仅若实现支持该类型才提供)
int_least8_t uint_least8_t
int_least16_t uint_least16_t
int_least32_t uint_least32_t
int_least64_t uint_least64_t
分别为宽度至少有 8 、 16 、 32 和 64 位的最小的有/无符号整数类型
int_fast8_t uint_fast8_t
int_fast16_t uint_fast16_t
int_fast32_t uint_fast32_t
int_fast64_t uint_fast64_t
分别为宽度至少有 8 、 16 、 32 和 64 位的最快的有/无符号整数类型
intmax_t uintmax_t 最大宽度的有/无符号整数类型
intptr_t uintptr_t 足以保有指针的有/无符号整数类型
宏
对应上述类型的最大值、最小值以及特殊值。
<cstdio>/<stdio.h>
输入输出标准库。
流属性
大部分属性在使用fopen打开一个文件的时候定义,如下:
- 读写权限
- 文本/二进制
- 缓冲
- 流的方向
流标识
主要有以下三种:
- 错误标识
- 文件结束标识
- 位置标识
函数
函数 | 功能 |
remove | 删除文件 |
rename | 重命名文件 |
tmpfile | 打开一个临时文件 |
tmpnam | 生成一个临时文件 |
fclose | 关闭文件 |
fflush | Flush流 |
fopen | 打开文件 |
freopen | 把一个新的文件名与给定的打开流相关联,同时关闭流中的旧文件 |
setbuf | 设置流的缓冲区 |
setvbuf | 定义流缓冲的函数 |
fprintf | 格式化写入流 |
fscanf | 从流读取格式化输入 |
printf | 格式化打印到stdout |
scanf | 从标准输入取 |
snprintf | 格式化打印到缓冲中 |
sprintf | 发送格式化输出到字符串 |
sscanf | 从字符串读取格式化输入 |
vfprintf | 使用参数列表发送格式化输出到流中 |
vfscanf | 从流中执行格式化输入 |
vprintf | 使用参数列表发送格式化输出到标准输出stdout |
vscanf | 字符串格式化输入函数 |
vsnprintf | 从参数列表格式化输出到buffer |
vsprintf | 从参数列表格式化输出到字符串 |
vsscanf | 从字符串格式输入到参数列表 |
fgetc | 从流中取一个字符 |
fgets | 从流中取字符串 |
fputc | 写入字符到流中 |
fputs | 写入字符串到流中 |
getc | 从流中取一个字符 |
getchar | 从标准输入取一个字符 |
gets | 从标准输入取一个字符串 |
putc | 写入字符到流中 |
putchar | 写字符到标准输出 |
puts | 写字符串到标准输出 |
ungetc | 把一个字符推入到指定的流中,以便它是下一个被读取到的字符 |
fread | 从指定的流中读取数据到所指向的数组中 |
fwrite | 写数据到指定的流中 |
fgetpos | 获取流中的当前位置 |
fseek | 设置流的文件位置给定的偏移 |
fsetpos | 设置指定位置 |
ftell | 返回给定流的当前文件位置 |
rewind | 返回文件位置为给定流的文件的开头 |
clearerr | 清除给定流的文件结束和错误标识 |
feof | 是否到文件末尾 |
ferror | 测试流的错误标识 |
perror | 打印错误消息 |
宏
宏 | 功能 |
BUFSIZ | 缓冲尺寸 |
EOF | 文件结束 |
FILENAME_MAX | 文件名最大长度 |
FOPN_MAX | 能同时打开的文件数量 |
L_tmpnam | 字符数组可以存储的由tmpnam函数创建的临时文件名的最大长度 |
NULL | 空指针 |
TMP_MAX | tmpnam函数可生成的独特文件名的最大数量 |
类型
类型 | 描述 |
FILE | 适合存储文件流信息的对象类型 |
fpos_t | 适合存储文件中任何位置的对象类型 |
size_t | 无符号整数类型,是sizeof关键字的结果 |
<cstdlib>/<stdlib.h>
此文件中定义了一些通用的函数,包括内存动态管理,随机数生成等等。
函数
- 字符串转换相关:
函数 | 功能 |
atof | 字符串转换成double类型 |
atoi | 字符串转换成整型 |
atol | 字符串转换成长整型 |
atoll | 字符串转换成长长整型 |
strtod | 字符串转换成double类型 |
strtof | 字符串转换成浮点型 |
strtol | 字符串转换成长整型 |
strtold | 字符串转换成长double型 |
strtoll | 字符串转换成长长整型 |
strtoul | 字符串转换成无符号长整型 |
strtoull | 字符串转换成无符号长长整型 |
- 随机相关
函数 | 功能 |
rand | 生成随机数 |
srand | 初始化随机数生成器 |
- 动态内存管理
函数 | 功能 |
calloc | 分配并且用0初始化数组 |
free | 释放内存 |
malloc | 分配内存 |
realloc | 重新分配内存 |
- 环境相关
函数 | 功能 |
abort | 中止当前进程 |
atexit | 设置执行exit时执行的函数 |
at_quick_exit | 设置执行quick_exit时执行的函数 |
exit | 结束调用进程 |
getenv | 获取环境变量 |
quick_exit | 快速结束调用进程 |
system | 执行系统命令 |
_Exit | 结束调用进程 |
- 搜索和排序
函数 | 功能 |
bsearch | 执行二分查找 |
qsort | 数组排序 |
- 整型数相关
函数 | 功能 |
abs | 求绝对值 |
div | 整数除法 |
labs | 求长整型绝对值 |
ldiv | 求长整型除法 |
llabs | 求长长整型绝对值 |
lldiv | 求长长整型除法 |
- 多字节字符
函数 | 功能 |
mblen | 求多字节字符的长度 |
mbtowc | 将多字节序列转换成宽字符 |
wctomb | 宽字符转换成多字节序列 |
- 多字节字符串
函数 | 功能 |
mbstowcs | 多字节字符串转换成宽字符字符串 |
wcstombs | 宽字符字符串转换成多字节字符串 |
- 宏
宏 | 功能 |
EXIT_FAILURE | 错误结束码 |
EXIT_SUCCESS | 成功结束码 |
MB_CUR_MAX | 多字节字符的最大尺寸 |
NULL | 空指针 |
RAND_MAX | 能随机出来的最大值 |
- 类型
类型 | 功能 |
div_t | div返回的结构体 |
ldiv_t | ldiv返回的结构体 |
lldiv_t | lldiv返回的结构体 |
size_t | 无符号整型 |
<cstring>/<string.h>
该头文件中定义了一些函数来维护c语言中的字符串和数组。
函数
- 拷贝相关
函数 | 功能 |
memcpy | 拷贝 |
memmove | 用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。 |
strcpy | 拷贝字符串 |
strncpy | 拷贝字符串 |
- 级联相关
函数 | 功能 |
strcat | 级联 |
strncat | 级联 |
- 比较
函数 | 功能 |
memcmp | 比较两块内存 |
strcmp | 比较两个字符串 |
strcoll | 比较两个字符串,但是结果取决于 LC_COLLATE 的位置设置 |
strncmp | 比较两个字符串中的字符 |
strxfrm | 根据程序当前的 |
- 搜索
函数 | 功能 |
memchr | 搜索前n个字节中第一次出现字符c的位置 |
strchr | 搜索字符串中第一次出现的c的位置 |
strcspn | 检索字符串str1中连续几个字符都不包含字符串str2中的字符 |
strpbrk | 检测str1中地一个匹配字符串str2中字符的字符,不包含空结束字符 |
strrchr | 在参数str只想的字符串中搜索最后一次出现字符c的位置 |
strspn | 检测字符串str1中地一个不在字符串str2中出现的字符下标 |
strstr | 在一个字符串中查找第一次出现另一个字符串的位置 |
strtok | 分解字符串为一组字符串,第二个参数为分割符 |
- 其它
函数 | 功能 |
memset | 给内存块赋值 |
strerror | 获取错误字符串的指针 |
strlen | 获取字符串的长度 |
- 宏
宏 | 功能 |
NULL | 空指针 |
- 类型
类型 | 描述 |
size_t | 无符号整型 |
<ctgmath>/<tgmath.h>
此头文件简单的包含<cmath>和<ccomplex>
<ctime>/<time.h>
时间相关的库
函数
- 时间相关
函数 | 描述 |
clock | 返回程序执行起,处理器时钟所使用的时间 |
difftime | 返回两个time之间相差的秒数 |
mktime | 把tm结构转换成一个依据本地时区的time_t值 |
time | 计算当前日历时间,并把它编码成time_t格式 |
- 转换相关
函数 | 描述 |
asctime | 把tm结构转换成字符串 |
ctime | 把time_v的值转换成字符串 |
gmtime | 把time_t转换成UTC时间的tm |
localtime | 把time_t转换成本地时间的tm |
strftime | 格式化时间为字符串 |
- 宏
宏 | 描述 |
CLOCKS_PER_SEC | 时钟每秒的滴答数 |
NULL | 空指针 |
- 类型
宏 | 描述 |
clock_t | 时钟类型 |
size_t | 无符号整型 |
time_t | 时间类型 |
struct time | 时间结构体 |
<cuchar>/<uchar.h>
此头文件用来支持UTF-16和UTF-32.
宏
宏 | 描述 |
STD_UTF_16 | 如果定义了此值则说明char16_t有UTF-16编码 |
STD_UTF_32 | 如果定义了此值则说明char32_t有UTF-32编码 |
函数
函数 | 描述 |
c16rtomb | 将16位字符转换成多字节序列 |
c32rtomb | 将32位字符转换成多字节序列 |
mbrtoc16 | 将多字节序列转换成16位字符 |
mbrtoc32 | 将多字节序列转换成32位字符 |
<cwchar>/<wchar.h>
此文件主要描述宽字符串相关的内容。
函数
- 输入/输出
函数 | 功能 |
fgetwc | 从流中读取宽字符 |
fgetws | 从流中读取宽字符串 |
fputwc | 写宽字符到流中 |
fputws | 写宽字符串到流中 |
fwide | 检测流方向 |
fwprintf | 写格式化数据到流 |
fwscanf | 从流中读格式化数据 |
getwc | 从流中获取宽字符 |
getwchar | 从标准输入获取宽字符 |
putwc | 给流写宽字符 |
putwchar | 给标准输出写宽字符 |
swprintf | 写格式化数据到宽字符串 |
swscanf | 从流中读格式化数据 |
ungetwc | 回退一个wc到流中 |
vfwprintf | 从参数列表输出到流中 |
vfwscanf | 从流中读入到参数列表 |
vswprintf | 同上 |
vswscanf | 同上 |
vwprintf | 同上 |
vwscanf | 同上 |
wprinf | 同上 |
wscanf | 同上 |
- 常规
wcstod
wcstof
wcstol
wcstold
wcstoll
wcstoul
wcstoull - 字符和字符串转换
btowc
mbrlen
mbrtowc
mbsinit
mbsrtowcs
wcrtomb
wctob
wcsrtombs - 字符串
wcscat
wcschr
wcscmp
wcscoll
wcscpy
wcscspn
wcslen
wcsncat
wcsncmp
wcsncpy
wcspbrk
wcsrchr
wcsspn
wcsstr
wcstok
wcsxfrm
wmemchr
wmemcmp
wmemcpy
wmemmove
wmemset - 时间
wcsftime - 类型
mbstate_t
size_t
struct tm
wchar_t
wint_t - 宏
NULL
WCAHR_MAX
WCHAR_MIN
WEOF
<cwctype>/wctype.h>
宽字符类型相关。
函数
iswalnum
iswalpha
iswblank
iswcntrl
iswdigit
iswgraph
iswlower
iswprint
iswpunct
iswspace
iswupper
iswxdigit
towlower
towupper
iswctype
towctrans
wctrans
wctype
类型
wctrans_t
wctype_t
wint_t
其它
WEOF