C 语言库函数是标准库提前封装好的现成函数,存放在各个头文件里面,程序员调用的时候只需要引入对应的头文件,不需要自己从零编写底层代码,就能完成输入输出字符串处理内存分配数学运算时间获取等基础功能。之所以要学习常用库函数,是因为日常刷题写项目绝大多数基础功能都可以直接调用库函数,大幅减少重复造轮子,提升开发效率,同时 C 标准库是跨平台的,只要遵守标准,同一份代码在不同编译器上都可以正常运行。每一类库函数都对应专属头文件,调用之前必须包含头文件,如果忘记引入头文件,老编译器可能只是警告,新编译器会直接报错。使用的时候第一步确认功能所属类别,第二步引入对应的头文件,第三步按照函数原型传入正确类型参数,第四步接收返回值,第五步注意函数边界和错误返回值判断。整体理解思路,常用库函数按照功能划分成输入输出字符串处理数学运算动态内存分配通用工具时间日期字符处理这几大类,下面分类详细介绍最常用的函数。
输入输出类 头文件 stdio.h
这是入门最先接触的库函数,负责控制台输入输出文件读写
| 函数名 | 功能说明 |
|---|---|
| printf | 格式化输出到控制台 |
| scanf | 从键盘格式化读取输入 |
| getchar | 读取单个字符 |
| putchar | 输出单个字符 |
| gets 不推荐 | 读取一行字符串,存在溢出风险 |
| fgets | 安全读取一行字符串,可以限制长度 |
| fopen | 打开文件 |
| fclose | 关闭文件 |
| fread | 二进制读取文件 |
| fwrite | 二进制写入文件 |
| fprintf | 格式化写入文件 |
| fscanf | 从文件格式化读取 |
字符串处理类 头文件 string.h
专门处理以零结尾的 char 字符串,是非常高频的库函数
| 函数名 | 功能说明 |
|---|---|
| strlen | 计算字符串有效长度,不统计末尾零 |
| strcpy | 字符串拷贝 |
| strncpy | 带长度限制的字符串拷贝,更安全 |
| strcat | 字符串拼接 |
| strncat | 带长度限制字符串拼接 |
| strcmp | 字符串比较,返回正负零 |
| strchr | 查找字符第一次出现位置 |
| strstr | 查找子串位置 |
| memset | 将一块内存按字节填充指定值 |
| memcpy | 内存块拷贝 |
| memmove | 可处理重叠内存的内存拷贝 |
数学运算类 头文件 math.h
数值计算相关库函数,注意部分编译器编译需要链接数学库
| 函数名 | 功能说明 |
|---|---|
| abs | 整数绝对值 |
| fabs | 浮点数绝对值 |
| pow | 求幂运算 x 的 y 次方 |
| sqrt | 开平方根 |
| sin cos tan | 三角函数,参数单位弧度 |
| log log10 | 自然对数 常用对数 |
| ceil | 向上取整 |
| floor | 向下取整 |
| round | 四舍五入取整 |
动态内存与通用工具类 头文件 stdlib.h
内存分配随机数程序退出数值转换都在这个头文件
| 函数名 | 功能说明 |
|---|---|
| malloc | 申请堆内存 |
| calloc | 申请堆内存并且初始化为零 |
| realloc | 调整已经申请内存大小 |
| free | 释放堆内存,必须和 malloc 配对 |
| rand | 生成伪随机数 |
| srand | 设置随机数种子 |
| atoi | 字符串转 int 整数 |
| atof | 字符串转 double 浮点数 |
| atol | 字符串转 long 整数 |
| exit | 直接终止程序 |
| qsort | 快速排序库函数 |
字符判断处理类 头文件 ctype.h
判断字符是数字字母大小写,字符大小写转换
| 函数名 | 功能说明 |
|---|---|
| isdigit | 判断是否是数字字符 |
| isalpha | 判断是否是英文字母 |
| isupper | 判断是否大写字母 |
| islower | 判断是否小写字母 |
| isspace | 判断是否空白字符 空格回车制表符 |
| toupper | 小写转大写 |
| tolower | 大写转小写 |
时间日期类 头文件 time.h
获取系统时间时间戳计时
| 函数名 | 功能说明 |
|---|---|
| time | 获取当前时间戳 |
| localtime | 时间戳转本地时间结构体 |
| strftime | 格式化输出时间字符串 |
| clock | 获取程序运行 CPU 计时 |
基础示例代码
include
include
include
int main ()
{
char str [32] = "hello";
int len = strlen (str);
printf ("字符串长度 % d\n", len);
int p = (int ) malloc (sizeof (int));
p = 100;
printf ("% d\n", p);
free (p);
return 0;
}
深度重点知识
第一 库函数并不是全部安全,strcpy strcat 这类老函数没有长度限制,很容易缓冲区溢出,正式项目优先选择带 n 版本的 strncpy strncat fgets。
第二 malloc 申请内存之后一定要 free,不释放会造成内存泄漏,重复 free 或者释放野指针会触发内存错误。
第三 math.h 里面函数参数有定义域限制,比如 sqrt 不能传入负数,pow 底数负数指数小数会产生异常,调用前要做参数校验。
第四 库函数返回值要判断,fopen 打开文件失败会返回空指针,malloc 申请失败也返回空指针,不能直接解引用。
第五 库函数是标准库提供,和用户自定义函数区分开,库函数名字属于预定义标识符,不建议自己重新定义同名函数覆盖原有库函数。
【常见问题】
问题 1 C 语言常用库函数有哪些里面调用库函数为什么要写头文件
回答 1 C 语言常用库函数有哪些里面,头文件存放库函数的声明,编译器需要依靠头文件知道函数参数和返回值类型,调用 C 语言常用库函数之前必须引入对应头文件,否则会出现编译报错或者隐式声明警告。
问题 2 C 语言常用库函数有哪些里面 strcpy 为什么不安全
回答 1 C 语言常用库函数有哪些中的 strcpy 没有长度限制,如果源字符串过长,会覆盖目标缓冲区,造成缓冲区溢出,所以学习 C 语言常用库函数的时候推荐改用 strncpy 这类带长度限制版本。
问题 3 C 语言常用库函数有哪些里面 malloc 和 calloc 有什么差别
回答 1 C 语言常用库函数有哪些里面 malloc 只申请堆内存不会初始化,calloc 申请内存之后自动把全部字节清零,二者都属于 stdlib.h 里面 C 语言常用库函数,使用结束都需要 free 释放。
问题 4 C 语言常用库函数有哪些里面 qsort 是什么功能
回答 1 C 语言常用库函数有哪些里面 qsort 是 stdlib.h 提供的快速排序库函数,可以对任意类型数组排序,需要用户自己编写比较函数,是 C 语言常用库函数里面非常实用的排序工具。
【免责申明】
本文内容基于 C 标准库主流实现编写,部分库函数在不同编译器和嵌入式平台存在支持差异,代码示例仅用于学习演示,实际项目开发请核对编译器手册,因为参数错误内存泄漏溢出造成程序异常,使用者自行承担相关风险。


