C标准库函数集总结
常用网站
- 在线编译:
https://www.tutorialspoint.com/compile_c_online.php - 头文件参考:
http://www.cplusplus.com/reference/clibrary/
标准库说明:
assert.h 错误检查
void assert(int expression)
这实际上是一个宏,不是一个函数,可用于在 C 程序中添加诊断。
ctype.h 字符检查
提供了一些字符测试和映射函数。
- int isalnum(int c)
该函数检查所传的字符是否是字母和数字。 - int isalpha(int c)
该函数检查所传的字符是否是字母。 - int iscntrl(int c)
该函数检查所传的字符是否是控制字符。 - int isdigit(int c)
该函数检查所传的字符是否是十进制数字。 - int isgraph(int c)
该函数检查所传的字符是否有图形表示法。 - int islower(int c)
该函数检查所传的字符是否是小写字母。 - int isprint(int c)
该函数检查所传的字符是否是可打印的。 - int ispunct(int c)
该函数检查所传的字符是否是标点符号字符。 - int isspace(int c)
该函数检查所传的字符是否是空白字符。 - int isupper(int c)
该函数检查所传的字符是否是大写字母。 - int isxdigit(int c)
该函数检查所传的字符是否是十六进制数字。 - int tolower(int c)
该函数把大写字母转换为小写字母。 - int toupper(int c)
该函数把小写字母转换为大写字母。
errno.h 错误定义
errno.h 头文件定义了整数变量 errno,它是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。
- extern int errno
这是通过系统调用设置的宏,在错误事件中的某些库函数表明了什么发生了错误。 - EDOM Domain Error
这个宏表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM。 - ERANGE Range Error
这个宏表示一个范围错误,它在输入参数超出数学函数定义的范围时发生,errno 被设置为 ERANGE。
float.h 浮点操作
float.h 头文件包含了一组与浮点值相关的依赖于平台的常量。比如相关取整、精度、舍入模式等等。
- FLT_RADIX
指数表示的基数。基数 2 表示二进制,基数 10 表示十进制,基数 16 表示十六进制。 - FLT_MANT_DIG
FLT_RADIX 基数中的位数
…
其它的就不例举了。
limits.h 变量限制
各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如 char、int 和 long)的值。
locale.h 本地化设置
特定地域的设置,比如日期格式和货币符号、分隔符等等。略过了。
math.h 数学工具
各种数学函数和一个宏。
在这个库中所有可用的功能都带有一个 double 类型的参数,且都返回 double 类型的结果。
比如正弦、余弦、正切、反正弦、反余弦、反正切、幂、N次方、对数、平方根、绝对值、余数。
setjmp.h 程序跳转
这个有意思。它定义了宏 setjmp()、函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规则。
jmp_buf
这是一个用于存储宏 setjmp() 和函数 longjmp() 相关信息的数组类型。
int setjmp(jmp_buf environment)
这个宏把当前环境保存在变量 environment 中,以便函数 longjmp() 后续使用。如果这个宏直接从宏调用中返回,则它会返回零,但是如果它从 longjmp() 函数调用中返回,则它会返回一个非零值。
void longjmp(jmp_buf environment, int value)
该函数恢复最近一次调用 setjmp() 宏时保存的环境,jmp_buf 参数的设置是由之前调用 setjmp() 生成的。
signal.h 信号设置
定义了一个变量类型 sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。
1 SIGABRT
程序异常终止。
2 SIGFPE
算术运算出错,如除数为 0 或溢出。
3 SIGILL
非法函数映象,如非法指令。
4 SIGINT
中断信号,如 ctrl-C。
5 SIGSEGV
非法访问存储器,如访问不存在的内存单元。
6 SIGTERM
发送给本程序的终止请求信号。
1 void (*signal(int sig, void (*func)(int)))(int)
设置信号处理函数。
2 int raise(int sig)
发出信号。
stdarg.h 可变参数设置
定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。
stddef .h 符号定义
定义了各种变量类型和宏:
ptrdiff_t
有符号整数,指针相减的结果。
size_t
无符号整数, sizeof 关键字的结果。
wchar_t
宽字符常量大小的整数类型。
NULL
空指针常量
offsetof(type, member-designator)
生成一个类型为 size_t 的整型常量,返回结构成员member-designator相对于结构体type开头的字节偏移量。
stdio .h 标准IO函数
这个太基础就不说了,各种IO的宏定义和操作。文件开闭、读写、偏移、输出等等。C语言第一个头文件,hello world都要用的0级基础库。
stdlib .h
这个就是重要嘉宾了,保护了各种通用工具函数。
- 字符串处理,比如将字符串转换为整数atoi、小数atof、无符号长整形atoul数等。
- 分配和释放内存,调整分配的内存大小等。malloc、calloc、free、realloc。
- 程序控制,终止abort、退出exit、退出并执行对应函数atexit等。
- 返回环境变量name的值:char *getenv(const char *name)
- 执行命令:system;
- 二分法查找:bsearch;
- 数组排列:qsort
- 获取绝对值abs、相除div、播种随机数srand、生成随机数rand;
- 多字节字符处理。一般的ascii字符是用一个字节表示的,就是单字节。 特殊字符,非英语的字符(比如汉字等)需要用两个字节表示,就是多字节,也称为宽字符。
string .h
各种操作字符数组的函数。
1 . void *memchr(const void *str, int c, size_t n) 返回str前n字符中c的位置
2. int memcmp(const void *str1, const void *str2, size_t n) 比较 str1 和 str2 的前 n 个字节
3. void *memcpy(void *dest, const void *src, size_t n) 从 src 复制 n 个字符到 dest。
4 . void *memmove(void *dest, const void *src, size_t n) 从 src 复制 n 个字符到 dest 的函数。
如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
5 . void *memset(void *str, int c, size_t n) ,str填c值,填n个。不说了。
6 . char *strcat(char *dest, const char *src) 把 src 填写到 dest 后面。
7 . char *strncat(char *dest, const char *src, size_t n) 同上,只填n个字符。
8. char *strchr(const char *str, int c) 搜索第一次出现字符 c的位置
9 int strcmp(const char *str1, const char *str2) 比较两个字符串。
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。
10 int strncmp(const char *str1, const char *str2, size_t n) 比较两个字符串前 n 个字节。
11 int strcoll(const char *str1, const char *str2) 比较结果取决于本地化LC_COLLATE 的位置。
12 char *strcpy(char *dest, const char *src) 把 src 复制到 dest。
13 char *strncpy(char *dest, const char *src, size_t n)把 src 复制到 dest,最多复制 n 个字符。
14 size_t strcspn(const char *str1, const char *str2) str1 返回连续有几个字符都不含str2 。
15 char *strerror(int errnum)从内部数组中搜索错误号 errnum,并返回错误消息。
16 size_t strlen(const char *str) 计算字符串 str 的长度,不包括空结束字符。
17 char *strpbrk(const char *str1, const char *str2)在str1中找出最先含有str2里任一字符的位置并返回,若找不到则返回空指针。strpbrk(“adcdefg”,“dj”),返回d。
18 char *strrchr(const char *str, int c)str 中最后一次出现字符 c的位置。
19 size_t strspn(const char *str1, const char *str2) str1 中第一个不在字符串 str2 中出现的字符下标。
比如strspn(abcdefg,abcd) 返回4
20 char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
21 char *strtok(char *str, const char *delim)以delim为标记分割str为数个字符串。
22 size_t strxfrm(char *dest, const char *src, size_t n)
根据 LC_COLLATE 来转换src 的前 n 个字符,放置 dest 中。
time.h
操作日期和时间的函数。
1 char *asctime(const struct tm *timeptr)
将timeptr转换为字符串。
2 clock_t clock(void)
返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。
3 char *ctime(const time_t *timer)
将timer转换为当地时间的字符串。
4 double difftime(time_t time1, time_t time2)
返回 time1 和 time2 之间相差的秒数 (time1-time2)。
5 struct tm *gmtime(const time_t *timer)
根据timer返回标准时间(GMT)表示。
6 struct tm *localtime(const time_t *timer)
根据timer返回本地时间。
7 time_t mktime(struct tm *timeptr)
把 timeptr 转换为本地时区的 time_t 值。
8 size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。
9 time_t time(time_t *timer)
计算当前日历时间,并把它编码成 time_t 格式。