by:符映维 2024-12-20
《C语言标准库头文件及其函数》
1. stdio.h (Standard Input and Output)
1.1 int printf(const char *format, ...);
格式化输出到stdout(屏幕)。1.2 int scanf(const char *format, ...);
从stdin(键盘)读取格式化输入。1.3 FILE *fopen(const char *path, const char *mode);
打开文件流。1.4 int fclose(FILE *stream);
关闭文件流。1.5 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
从流读取数据。1.6 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
向流写入数据。1.7 int fprintf(FILE *stream, const char *format, ...);
格式化输出到指定文件流。1.8 int fscanf(FILE *stream, const char *format, ...);
从指定文件流读取格式化输入。1.9 char *fgets(char *str, int n, FILE *stream);
从流读取一行字符串。1.10 int fputs(const char *str, FILE *stream);
向流写入一个字符串。
----------------------------------------------------------------------------
1.11 FILE *tmpfile(void);
创建一个临时文件。(stdio.h的扩展功能)1.12 char *tmpnam(char *s);
生成一个唯一的临时文件名。(stdio.h的扩展功能)
2. stdlib.h (Standard Library)
2.1 void *malloc(size_t size);
分配内存。2.2 void free(void *ptr);
释放之前分配的内存。2.3 void *calloc(size_t nmemb, size_t size);
分配并初始化为零的内存块。2.4 void *realloc(void *ptr, size_t size);
改变已分配内存块的大小。2.5 int abs(int j);
返回整数的绝对值。2.6 double atof(const char *nptr);
将字符串转换成浮点数。2.7 int atoi(const char *nptr);
将字符串转换成整数。2.8 long atol(const char *nptr);
将字符串转换成长整数。2.9 void exit(int status);
终止程序执行。2.10 div_t div(int numer, int denom);
整数除法,并返回商和余数。2.11 char *getenv(const char *name);
获取环境变量的值。2.12 int system(const char *command);
执行系统命令。
---------------------------------------------------------------------------
2.13 void srand(unsigned int seed);
初始化随机数生成器种子。(stdlib.h的扩展功能)2.14 int rand(void);
生成伪随机数。(stdlib.h的扩展功能)2.15 int mbtowc(wchar_t *pwc, const char *s, size_t n);
多字节字符转换为宽字符。(stdlib.h的扩展功能)2.16 int wctomb(char *s, wchar_t wchar);
, 宽字符转换为单字节字符。(stdlib.h的扩展功能)2.17 size_t mbsrtowcs(wchar_t *dst, const char **src, size_t len, mbstate_t *ps);
多字节字符串转换为宽字符字符串。(stdlib.h的扩展功能)2.18 size_t wcsrtombs(char *dst, const wchar_t **src, size_t len, mbstate_t *ps);
宽 字符字符串转换为多字节字符串。(stdlib.h的扩展功能)
3. string.h (String Handling)
3.1 char *strcpy(char *dest, const char *src);
复制字符串。3.2 char *strncpy(char *dest, const char *src, size_t n);
复制最多n个字符的字符串。3.3 char *strcat(char *dest, const char *src);
连接两个字符串。3.4 char *strncat(char *dest, const char *src, size_t n);
连接最多n个字符的字符串。3.5 size_t strlen(const char *s);
计算字符串长度。3.6 int strcmp(const char *s1, const char *s2);
比较两个字符串。3.7 int strncmp(const char *s1, const char *s2, size_t n);
比较最多n个字符的字符串。3.8 char *strchr(const char *s, int c);
查找首次出现的字符c。3.9 char *strrchr(const char *s, int c);
查找最后一次出现的字符c。3.10 void *memset(void *s, int c, size_t n);
填充n个字节的内存为特定值。3.11 void *memcpy(void *dest, const void *src, size_t n);
复制内存块。3.12 void *memmove(void *dest, const void *src, size_t n);
安全复制可能重叠的内存区域。
4. math.h (Mathematical Functions)
4.1 double sin(double x);
正弦函数。4.2 double cos(double x);
余弦函数。4.3 double tan(double x);
正切函数。4.4 double asin(double x);
反正弦函数。4.5 double acos(double x);
反余弦函数。4.6 double atan(double x);
反正切函数。4.7 double atan2(double y, double x);
以弧度为单位的反正切函数,考虑象限。4.8 double sinh(double x);
双曲正弦函数。4.9 double cosh(double x);
双曲余弦函数。4.10 double tanh(double x);
双曲正切函数。4.11 double exp(double x);
指数函数。4.12 double log(double x);
自然对数。4.13 double pow(double x, double y);
幂函数,计算x的y次方。4.14 double sqrt(double x);
平方根函数。4.15 double fabs(double x);
绝对值函数。4.16 double ceil(double x);
向上取整。4.17 double floor(double x);
向下取整。4.18 double fmod(double x, double y);
浮点数取模。
5. time.h (Time and Date)
5.1 time_t time(time_t *tloc);
获取当前日历时间。5.2 struct tm *localtime(const time_t *timer);
将日历时间转换为本地时间。5.3 struct tm *gmtime(const time_t *timer);
将日历时间转换为UTC时间。5.4 char *asctime(const struct tm *tm);
将时间结构转换为ASCII表示。5.5 size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
格式化时间字符串。
6. stdarg.h (Variable Argument Lists)
6.1 void va_start(va_list ap, last_fixed_param);
初始化一个变参列表。6.2 type va_arg(va_list ap, type);
获取变参列表中的下一个参数。6.3 void va_end(va_list ap);
结束变参列表的使用。
7. ctype.h (Character Handling)
7.1 int isalnum(int c);
检查字符是否为字母或数字。7.2 int isalpha(int c);
检查字符是否为字母。7.3 int iscntrl(int c);
检查字符是否为控制字符。7.4 int isdigit(int c);
检查字符是否为十进制数字。7.5 int isgraph(int c);
检查字符是否有图形表示(非空且非空白)。7.6 int islower(int c);
检查字符是否为小写字母。7.7 int isprint(int c);
检查字符是否可打印(包括空格)。7.8 int ispunct(int c);
检查字符是否为标点符号。7.9 int isspace(int c);
检查字符是否为空白字符。7.10 int isupper(int c);
检查字符是否为大写字母。7.11 int isxdigit(int c);
检查字符是否为十六进制数字。7.12 int tolower(int c);
将字符转换为小写。7.13 int toupper(int c);
将字符转换为大写。
8. errno.h (Error Number Definitions)
8.1 errno
当发生错误时,系统调用或库函数会设置此变量。
9. limits.h (Integer Limits)
9.1 CHAR_BIT
字符类型的位数。9.2 SCHAR_MIN, SCHAR_MAX
有符号字符类型的最小值和最大值。9.3 UCHAR_MAX
无符号字符类型的最小值和最大值。9.4 SHRT_MIN, SHRT_MAX
短整型的最小值和最大值。9.5 USHRT_MAX
无符号短整型的最大值。9.6 INT_MIN, INT_MAX
整型的最小值和最大值。9.7 UINT_MAX
无符号整型的最大值。9.8 LONG_MIN, LONG_MAX
长整型的最小值和最大值。9.9 ULONG_MAX
无符号长整型的最大值。
10. float.h (Floating-Point Limits)
10.1 FLT_RADIX
浮点数的基数。10.2 FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG
浮点类型的有效位数。10.3 FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON
浮点类型可以表示的最小正数x,使得1.0 + x != 1.0。10.4 FLT_MIN, DBL_MIN, LDBL_MIN
正常浮点数的最小值。10.5 FLT_MAX, DBL_MAX, LDBL_MAX
浮点数的最大值。
11. locale.h (Localization)
11.1 struct lconv *localeconv(void);
返回当前区域设置的数值格式信息。11.2 char *setlocale(int category, const char *locale);
设置或查询区域设置。
12. setjmp.h (Nonlocal Jumps)
12.1 int setjmp(jmp_buf env);
保存环境。12.2 void longjmp(jmp_buf env, int val);
恢复由setjmp保存的环境,并返回给定值。
13. signal.h (Signal Handling)
13.1 void (*signal(int sig, void (*handler)(int)))(int);
设置信号处理程序。13.2 int raise(int sig);
发送信号给调用进程。
14. wchar.h (Wide Character Functions)
14.1 wchar_t *wcschr(const wchar_t *ws, wchar_t wc);
查找宽字符串中首次出现的宽字符。14.2 wchar_t *wcscpy(wchar_t *dest, const wchar_t *src);
复制宽字符串。14.3 size_t wcslen(const wchar_t *ws);
计算宽字符串长度。14.4 wint_t fgetwc(FILE *stream);
从流读取宽字符。14.5 wint_t fputwc(wchar_t wc, FILE *stream);
向流写入宽字符。
15. wctype.h (Wide Character Classification and Mapping)
15.1 wint_t towlower(wint_t wc);
将宽字符转换为小写。15.2 wint_t towupper(wint_t wc);
将宽字符转换为大写。15.3 int iswalpha(wint_t wc);
检查宽字符是否为字母。15.4 int iswdigit(wint_t wc);
检查宽字符是否为十进制数字。
16. complex.h (Complex Arithmetic)
16.1 double complex cacos(double complex z);
计算复数的反余弦。16.2 double complex casin(double complex z);
计算复数的反正弦。16.3 double complex catan(double complex z);
计算复数的反正切。16.4 double complex ccos(double complex z);
计算复数的余弦。16.5 double complex csin(double complex z);
计算复数的正弦。16.6 double complex ctan(double complex z);
计算复数的正切。16.7 double complex cexp(double complex z);
计算复数的指数。16.8 double complex clog(double complex z);
计算复数的自然对数。
17. fenv.h (Floating-Point Environment)
17.1 int feclearexcept(int excepts);
清除指定的浮点异常状态。17.2 int fegetexceptflag(fexcept_t *flagp, int excepts);
获取指定浮点异常的状态。17.3 int fesetexceptflag(const fexcept_t *flagp, int excepts);
设置指定浮点异常的状态。17.4 int fetestexcept(int excepts);
测试指定浮点异常是否发生。17.5 int fegetround(void);
获取当前舍入方向。17.6 int fesetround(int round);
设置舍入方向。
18. inttypes.h (Integer Types)
18.1 int8_t, int16_t, int32_t, int64_t
指定宽度的有符号整型。18.2 uint8_t, uint16_t, uint32_t, uint64_t
指定宽度的无符号整型。18.3 int_least8_t, int_least16_t, int_least32_t, int_least64_t
至少具有指定宽度的最小有符号整型。18.4 int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t
尽可能快的指定宽度有符号整型。18.5 intmax_t, uintmax_t
最大宽度的有符号和无符号整型。
19. stdatomic.h (Atomic Operations)
19.1 _Atomic type
声明一个原子类型的对象。19.2 atomic_flag
无锁标志,通常用于实现无锁算法。19.3 atomic_init 和 ATOMIC_VAR_INIT
初始化原子变量。19.4 atomic_store 和 atomic_load
存储和加载原子值。19.5 atomic_exchange
交换两个原子值。19.6 atomic_compare_exchange_strong 和 atomic_compare_exchange_weak
比较并交换两个原子值,分别提供强和弱版本。
20. stdbool.h (Boolean Type and Values)
20.1 bool
布尔类型。20.2 true
布尔值真。20.3 false
布尔值假。
21. stdalign.h (Alignment Control)
21.1 alignas
指定最小对齐要求。21.2 alignof
查询类型的对齐要求。
22. stdnoreturn.h (Nonreturning Functions)
22.1 noreturn
标记函数不会返回给调用者。
23. threads.h (Thread Management)
23.1 thrd_create(thrd_t *thr, thrd_start_t func, void *arg);
创建新线程。23.2 thrd_join(thrd_t thr, int *res);
等待线程结束。23.3 thrd_sleep(const struct timespec *duration, struct timespec *remaining);
线程休眠。23.4 thrd_equal(thrd_t thr1, thrd_t thr2);
判断两个线程ID是否相等。23.5 thrd_detach(thrd_t thr);
分离一个线程,使其结束时资源自动回收。23.6 thrd_yield(void);
让出当前线程的时间片。
24. uchar.h (Unicode Character Handling)
24.1 size_t mbrtoc16(uint_least16_t *pc16, const char *s, size_t n, mbstate_t *ps);
多字节字符转换为UTF-16编码。24.2 size_t c16rtomb(char *s, uint_least16_t c16, mbstate_t *ps);
UTF-16编码转换为多字节字符。24.3 size_t mbrtoc32(uint_least32_t *pc32, const char *s, size_t n, mbstate_t *ps);
多字节字符转换为UTF-32编码。24.4 size_t c32rtomb(char *s, uint_least32_t c32, mbstate_t *ps);
UTF-32编码转换为多字节字符。
25. iso646.h (Alternative Operators)
25.1 and
逻辑与(替代&&)。25.2 or
逻辑或(替代||)。25.3 not
逻辑非(替代!)。25.4 bitand
按位与(替代&)。25.5 bitor
按位或(替代|)。
这个头文件提供了对ISO 646字符集的支持,它定义了一些宏来为使用非ASCII字符集的编程环境提供替代的操作符号。
26. tgmath.h (Generic Mathematical Functions)
- 26.1 泛型数学函数
自动选择合适的浮点类型版本(如float, double, long double)进行数学运算。
tgmah.h 头文件提供了一组泛型宏,它们可以自动根据参数类型调用对应的数学函数版本,从而简化了代码编写。
27. stddef.h (Standard Type Definitions)
27.1 size_t
无符号整数类型,表示对象大小。27.2 ptrdiff_t
带符号整数类型,表示指针之间的差值。27.3 wchar_t
宽字符类型。27.4 NULL
空指针常量。27.5 offsetof(type, member)
计算结构体成员相对于结构体起始位置的偏移量。
28. 以下是按C89到C18进行归类
-
28.1 C89/C90 标准
28.1.1 stdio.h
标准输入输出函数。28.1.2 stdlib.h
标准库函数,如内存分配、转换函数等。28.1.3 string.h
字符串处理函数。28.1.4 math.h
数学运算函数。28.1.5 time.h
时间日期处理函数。28.1.6 stdarg.h
可变参数列表支持。28.1.7 ctype.h
字符处理函数。28.1.8 errno.h
错误码定义。28.1.9 limits.h
数据类型极限值。28.1.10 float.h
浮点数极限值。28.1.11 locale.h
区域化支持。28.1.12 setjmp.h
非本地跳转功能。28.1.13 signal.h
信号处理。
-
28.2 C95 (ISO/IEC 9899:1995) 标准
28.2.1 iso646.h
提供替代操作符符号,适用于非ASCII字符集。
-
28.3 C99 标准
28.3.1 complex.h
复数算术操作。28.3.2 fenv.h
浮点环境控制。28.3.3 inttypes.h
定义了具有特定宽度的整数类型。28.3.4 stdbool.h
布尔类型和值。28.3.5 stdint.h
定义了具有特定宽度的整数类型。28.3.6 tgmath.h
泛型数学宏。28.3.7 wchar.h
宽字符和宽字符串处理。28.3.8 wctype.h
宽字符分类和映射。
-
28.4 C11 标准
28.4.1 stdalign.h
对齐控制工具。28.4.2 stdatomic.h
原子操作支持。28.4.3 stdnoreturn.h
标记不返回的函数。28.4.4 threads.h
线程管理函数。28.4.5 uchar.h
UTF-16 和 UTF-32 编码支持。
-
28.5 C17 (C18) 标准
C17实际上是一个维护更新,主要用于修复缺陷并澄清一些规范,而没有引入新的特性或库。因此,在这个版本中并没有新增加的标准库头文件。
29. 常见的非标准库
29.1 conio.h
提供控制台输入输出函数,在DOS和Windows平台上常见。29.2 ncurses.h
提供终端处理和文本用户界面的功能,常用于Unix/Linux平台。29.3 windows.h
提供访问Windows API的接口,只适用于Windows操作系统。
30. 其他注意事项(请注意,C语言标准库是有限的,而实际开发中可能会使用大量的第三方库来满足特定需求)例如:
- 30.1 OpenGL 和 SDL 图形和游戏开发。
- 30.2 libcurl 网络通信。
- 30.3 SQLite3 嵌入式数据库操作。
- 30.4 JSON-C 或 cJSON 处理JSON数据格式。
这些第三方库大大扩展了C语言的能力,使开发者能够更轻松地完成复杂任务。
31. 总结
以上内容按照不同C标准版本对C语言标准库头文件进行了分类,每个版本都增加了新的功能和改进,以适应不断变化的编程需求和技术进步。 到目前为止,本文档已经涵盖了C语言标准库中的大部分主要头文件。 如果你正在处理特定的问题领域,例如多线程编程或需要严格控制数据类型的大小和对齐方式,那么这些库将特别有用。 了解它们可以帮助你更好地利用C语言进行开发,这些内容展示了每个库中的一些关键函数及其简要描述。 对于更详细的使用方法和参数说明,建议参考权威的C语言文档或在线资源,如ISO C标准文档、官方C语言参考资料等。