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
                









