课堂

C语言头文件

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>

核心思路不是背所有函数,而是记住:

想完成什么操作 → 去哪个头文件找函数。