你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

4万字详解C语言标准库

2021/12/21 7:10:56

文章目录

    • stdio.h
    • stdlib.h
    • 字符串操作、浮点计算、类型判断
    • 时间与货币
    • 单功能库
    • 常量库

之前看过一个段子,说是老师布置了一个作业,同学们查了5篇CSDN4篇知乎,发现都是机翻的一个StackOverflow。

而对于C语言标准库这种尽管重要但不会被留作业的知识,就更惨不忍睹了。对于常用的printf,基本已经被写烂了,大家都学会了通过强调大家都会的知识来获取关注,而对大家不会的知识缄口不言。

而我要做的,就是尽量精简大家都会的知识,而将以往被忽略的知识重视起来。这些被忽略的知识如同树根一样,尽管住在树枝上的精灵们不必着眼于此,但了解了树根的结构,会明白这棵树为何会如此茁壮。

C语言标准库是一组内置的函数、常量,被定义在15个头文件中,提供了C语言中最基础的功能,如下表所示

头文件基本功能使用频率内容量
stdio.h输入输出⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
stdlib.h杂项⭐⭐⭐⭐⭐⭐⭐⭐⭐
string.h字符串⭐⭐⭐⭐⭐⭐⭐⭐
math.h基础数学函数⭐⭐⭐⭐⭐⭐
stdarg.h参数列表⭐⭐⭐⭐
time.h时间日期⭐⭐⭐⭐⭐
assert.h断言⭐⭐⭐
ctype.h类型判断⭐⭐⭐⭐
errno.h错误信息⭐⭐
signal.h信号
setjmp.h非局部跳转
stddef.h指针偏移
locale.h本地货币_
float.h浮点范围_
limits.h整数范围_

由于本人并非重度C语言用户,所以使用频率可能会有些偏颇,尤其是后面三个头文件从来没用过。

stdio.h

输入输出包,涵盖了文件读写的全部过程和标准输入输出。

操作一个文件的流程大致为:从fopen打开文件,到fread, fwrite读写文件,再到fflush强制写入缓存,最后fclose关闭文件;如果需要精确定位写入或读取的位置,可以通过fseekfgetpos

所谓标准输入输出,如果简化一下,可以理解为键盘和显示屏,键盘将标准输入传递给终端,终端将内容打印在显示屏上。关于这种基于字符串的人机交互,stdio.h主要提供了两组函数,一组是getput,另一组是printscan

  • stdio.h:stdio.h
  • 文件读写:一文精通C语言文件读写
  • 文件结构体:C语言文件读写的基石:FILE结构体
  • get和put函数族:get和put
  • printf函数族:彻底练会printf函数

stdlib.h

这个包的名字很有意思,就是standard library,相当于标准库中无法归入其他类别的统统放到这里,主要分为四个部分:内存、系统、字符串转数值和数学算法。

  • 内存分配:malloc, calloc, realloc的区别
  • 系统交互:return, exit, abort的区别
  • system函数:用system调用系统命令行
  • 字符串转数值:C语言中如何将字符串转数值
  • 快速排序和二分查找:C标准库的两大神器:快速排序qsort和二分查找bsearch

字符串操作、浮点计算、类型判断

string.h:C语言字符串的查询、比较、复制等功能

ctype.h:C语言数据类型判断

math.h:C语言的基本浮点计算函数

时间与货币

作为一门国际化的大语言,C标准库自然要提供针对不同国家的本地化头函数,而因地而异最为显著的事件便是时间与货币。C标准库对不同地区的时间和货币的表达形式进行了本地化的描述,分别封装在time.hlocale.h中。

  • time.h:C语言设置时间格式
  • locale.h:C语言设置美元格式

单功能库

C语言标准库中有很多十分简单,故统一归类到单一功能库下,包括

  • stdarg.h:C语言对可变参数的支持
  • assert.h:断言和静态断言
  • stddef.h:用stddef表示指针距离
  • setjmp.h:C语言远程跳转setjmp

常量库

C语言有一些标准库中只定义了一些宏,单并未声明函数,故将这类库统一归类到常量库中。

  • 系统错误码errno.h:系统错误码详解
  • 信号signal.h
  • float.h:浮点型限制信息
  • limits.h:整数的取值范围