C 语言常用头文件速查
<stdio.h> —— 标准输入输出
主要用于输入、输出和文件操作。
| 函数 | 作用 |
|---|---|
printf() |
格式化输出 |
scanf() |
格式化输入 |
getchar() |
读取一个字符 |
putchar() |
输出一个字符 |
fgets() |
读取一行字符串 |
puts() |
输出字符串 |
fopen() |
打开文件 |
fclose() |
关闭文件 |
fprintf() |
向文件格式化输出 |
fscanf() |
从文件格式化输入 |
<stdlib.h> —— 通用工具
主要用于动态内存、随机数、字符串转换、程序退出等。
| 函数 | 作用 |
|---|---|
malloc() |
动态分配内存 |
calloc() |
分配并初始化内存 |
realloc() |
调整已分配内存大小 |
free() |
释放动态内存 |
rand() |
生成伪随机数 |
srand() |
设置随机数种子 |
atoi() |
字符串转 int |
strtol() |
字符串转 long |
abs() |
求整数绝对值 |
exit() |
结束程序 |
qsort() |
排序 |
bsearch() |
二分查找 |
<string.h> —— 字符串处理
主要用于处理 C 风格字符串。
| 函数 | 作用 |
|---|---|
strlen() |
获取字符串长度 |
strcmp() |
比较两个字符串 |
strcpy() |
复制字符串 |
strncpy() |
复制指定长度字符串 |
strcat() |
拼接字符串 |
strchr() |
查找字符 |
strstr() |
查找子字符串 |
memcpy() |
复制一段内存 |
memset() |
设置一段内存 |
注意:
strlen() 不计算字符串末尾的 '\0'。
<ctype.h> —— 字符判断与转换
主要用于判断字符类型以及大小写转换。
| 函数 | 作用 |
|---|---|
isalpha(c) |
是否为字母 |
isdigit(c) |
是否为数字 |
isalnum(c) |
是否为字母或数字 |
islower(c) |
是否为小写字母 |
isupper(c) |
是否为大写字母 |
isspace(c) |
是否为空白字符 |
ispunct(c) |
是否为标点符号 |
tolower(c) |
转换为小写字母 |
toupper(c) |
转换为大写字母 |
建议写成:
isalpha((unsigned char)c)
这样比直接写 isalpha(c) 更安全。
<math.h> —— 数学函数
用于常见数学计算。
| 函数 | 作用 |
|---|---|
sqrt(x) |
平方根 |
pow(x, y) |
计算 x^y |
sin(x) |
正弦 |
cos(x) |
余弦 |
tan(x) |
正切 |
log(x) |
自然对数 |
log10(x) |
常用对数 |
exp(x) |
计算 e^x |
floor(x) |
向下取整 |
ceil(x) |
向上取整 |
round(x) |
四舍五入 |
fabs(x) |
浮点数绝对值 |
Linux / GCC 下有时需要:
gcc main.c -o main -lm
<stdbool.h> —— 布尔类型
提供:
bool
true
false
示例:
#include <stdbool.h>
bool flag = true;
<stdint.h> —— 固定宽度整数
提供明确位数的整数类型。
| 类型 | 含义 |
|---|---|
int8_t |
8 位有符号整数 |
uint8_t |
8 位无符号整数 |
int16_t |
16 位有符号整数 |
uint16_t |
16 位无符号整数 |
int32_t |
32 位有符号整数 |
uint32_t |
32 位无符号整数 |
int64_t |
64 位有符号整数 |
uint64_t |
64 位无符号整数 |
常用于:
- 位运算
- 文件格式
- 网络协议
- 系统编程
<limits.h> —— 整数范围
提供各种整数类型的最大值和最小值。
| 宏 | 含义 |
|---|---|
INT_MAX |
int 最大值 |
INT_MIN |
int 最小值 |
LONG_MAX |
long 最大值 |
LONG_MIN |
long 最小值 |
CHAR_MAX |
char 最大值 |
CHAR_MIN |
char 最小值 |
例如:
#include <limits.h>
printf("%d\n", INT_MAX);
<float.h> —— 浮点数范围
用于查看浮点数的范围和精度。
| 宏 | 含义 |
|---|---|
FLT_MAX |
float 最大值 |
FLT_MIN |
float 最小正数 |
DBL_MAX |
double 最大值 |
DBL_MIN |
double 最小正数 |
FLT_DIG |
float 有效十进制位数 |
DBL_DIG |
double 有效十进制位数 |
<time.h> —— 时间处理
用于日期、时间以及程序运行时间。
| 函数 / 类型 | 作用 |
|---|---|
time() |
获取当前时间 |
clock() |
获取 CPU 时间 |
difftime() |
计算时间差 |
localtime() |
转换成本地时间 |
strftime() |
格式化时间 |
time_t |
保存时间 |
struct tm |
保存年月日时分秒 |
<assert.h> —— 断言
主要用于调试。
例如:
#include <assert.h>
int x = 5;
assert(x > 0);
如果条件不成立,程序会终止并报告错误。
<stddef.h> —— 基础类型
定义了一些常见的基础类型和宏。
| 内容 | 作用 |
|---|---|
size_t |
表示对象大小 |
ptrdiff_t |
表示两个指针之间的差 |
NULL |
空指针宏 |
例如:
size_t len = strlen("hello");
strlen() 的返回类型就是 size_t。
<errno.h> —— 错误处理
主要提供 errno 和标准错误码。
| 内容 | 含义 |
|---|---|
errno |
保存最近一次错误代码 |
EINVAL |
参数无效 |
ENOMEM |
内存不足 |
ERANGE |
数值超出范围 |
<signal.h> —— 信号处理
用于处理操作系统信号。
| 信号 | 含义 |
|---|---|
SIGINT |
中断信号,常由 Ctrl+C 触发 |
SIGTERM |
请求程序终止 |
SIGSEGV |
非法内存访问 |
初学阶段了解即可。
CS50 特有头文件
<cs50.h>
cs50.h 不是 C 标准库的一部分,而是 Harvard CS50 提供的库。
常用输入函数
| 函数 | 作用 |
|---|---|
get_char() |
获取一个字符 |
get_int() |
获取一个整数 |
get_long() |
获取一个 long |
get_float() |
获取一个 float |
get_double() |
获取一个 double |
get_string() |
获取一个字符串 |
CS50 还定义了:
string
它本质上类似于:
char *
离开 CS50 环境后,通常使用标准 C 的:
scanf()
fgets()
strtol()
等函数代替。
常用头文件总表
| 头文件 | 主要作用 | 常见程度 |
|---|---|---|
<stdio.h> |
输入输出 | ⭐⭐⭐⭐⭐ |
<stdlib.h> |
内存、转换、随机数 | ⭐⭐⭐⭐⭐ |
<string.h> |
字符串处理 | ⭐⭐⭐⭐⭐ |
<ctype.h> |
字符判断 | ⭐⭐⭐⭐⭐ |
<math.h> |
数学函数 | ⭐⭐⭐⭐ |
<stdbool.h> |
布尔类型 | ⭐⭐⭐⭐ |
<stdint.h> |
固定宽度整数 | ⭐⭐⭐ |
<limits.h> |
整数范围 | ⭐⭐⭐ |
<float.h> |
浮点数范围 | ⭐⭐ |
<time.h> |
时间处理 | ⭐⭐⭐ |
<assert.h> |
调试断言 | ⭐⭐⭐ |
<stddef.h> |
基础类型 | ⭐⭐ |
<errno.h> |
错误处理 | ⭐⭐ |
<signal.h> |
信号处理 | ⭐ |
<cs50.h> |
CS50 输入工具 | ⭐⭐⭐⭐⭐ |
当前阶段重点掌握
对于 C / CS50 初学阶段,建议重点掌握:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <stdbool.h>
可以简单记成:
| 想做的事 | 头文件 |
|---|---|
| 输入输出 | <stdio.h> |
| CS50 获取用户输入 | <cs50.h> |
| 字符串处理 | <string.h> |
| 判断字母、数字、大小写 | <ctype.h> |
| 数学运算 | <math.h> |
| 内存、随机数、转换 | <stdlib.h> |
使用 bool |
<stdbool.h> |
核心思路不是背所有函数,而是记住:
想完成什么操作 → 去哪个头文件找函数。