欢迎光临
我们一直在努力

《C程序设计语言》读书笔记11: 附录 B 标准库

📘 K&R 附录B “标准库”深度解析

作者: andylin02
学习章节: 《The C Programming Language》附录B 标准库
关键词: K&R C、ANSI C、标准库、stdio.h、string.h、stdlib.h、ctype.h、math.h、time.h、assert.h、库函数速查


一、附录B概览

附录B是C语言标准库的完整参考手册,列出了ANSI C定义的15个标准头文件及其包含的所有函数、宏、类型定义。如果说附录A是“语法词典”,那么附录B就是“函数API速查手册”——你不需要背诵所有内容,但需要知道有什么可用以及在哪里查找。

#mermaid-svg-PaxrVkTt7r1b2rFK{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PaxrVkTt7r1b2rFK .error-icon{fill:#552222;}#mermaid-svg-PaxrVkTt7r1b2rFK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PaxrVkTt7r1b2rFK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PaxrVkTt7r1b2rFK .marker.cross{stroke:#333333;}#mermaid-svg-PaxrVkTt7r1b2rFK svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PaxrVkTt7r1b2rFK p{margin:0;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge{stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 text{fill:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth–1{stroke-width:17;}#mermaid-svg-PaxrVkTt7r1b2rFK .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-0{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-0{stroke-width:14;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-1{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-1{stroke-width:11;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 text{fill:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-2{stroke-width:8;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-3{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-3{stroke-width:5;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-4{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-4{stroke-width:2;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-5{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-5{stroke-width:-1;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-6{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-6{stroke-width:-4;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-7{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-7{stroke-width:-7;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-8{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-8{stroke-width:-10;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-9{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-9{stroke-width:-13;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 polygon,#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 text{fill:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .node-icon-10{font-size:40px;color:black;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .edge-depth-10{stroke-width:-16;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled circle,#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:lightgray;}#mermaid-svg-PaxrVkTt7r1b2rFK .disabled text{fill:#efefef;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-root rect,#mermaid-svg-PaxrVkTt7r1b2rFK .section-root path,#mermaid-svg-PaxrVkTt7r1b2rFK .section-root circle,#mermaid-svg-PaxrVkTt7r1b2rFK .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-PaxrVkTt7r1b2rFK .section-root text{fill:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-root span{color:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .section-2 span{color:#ffffff;}#mermaid-svg-PaxrVkTt7r1b2rFK .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-PaxrVkTt7r1b2rFK .edge{fill:none;}#mermaid-svg-PaxrVkTt7r1b2rFK .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-PaxrVkTt7r1b2rFK :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

附录B 标准库

输入输出 stdio.h

文件操作 fopen fclose

字符读写 getc putc

格式化 printf scanf

字符处理 ctype.h

测试 isalpha isdigit

转换 toupper tolower

字符串 string.h

复制 strcpy strncpy

比较 strcmp strncmp

长度 strlen

实用工具 stdlib.h

内存 malloc free

转换 atoi atof

随机 rand srand

数学 math.h

三角函数 sin cos

幂函数 pow sqrt

日期时间 time.h

诊断 assert.h

其他头文件


二、标准库头文件一览

ANSI C定义了以下15个标准头文件:

头文件主要用途
<assert.h> 诊断(assert 宏)
<ctype.h> 字符类别测试和转换
<errno.h> 错误码 errno
<float.h> 浮点数特性(范围、精度)
<limits.h> 整型大小限制
<locale.h> 本地化设置
<math.h> 数学函数
<setjmp.h> 非局部跳转
<signal.h> 信号处理
<stdarg.h> 可变参数处理
<stddef.h> 通用类型定义(NULL、size_t 等)
<stdio.h> 输入/输出
<stdlib.h> 实用工具(内存、转换、随机数)
<string.h> 字符串处理
<time.h> 日期和时间

三、<stdio.h> —— 输入/输出

3.1 核心函数分类

#mermaid-svg-vlE1PCF0Y1YRNNV2{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .error-icon{fill:#552222;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .marker.cross{stroke:#333333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 p{margin:0;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .cluster-label text{fill:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .cluster-label span{color:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .cluster-label span p{background-color:transparent;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .label text,#mermaid-svg-vlE1PCF0Y1YRNNV2 span{fill:#333;color:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .node rect,#mermaid-svg-vlE1PCF0Y1YRNNV2 .node circle,#mermaid-svg-vlE1PCF0Y1YRNNV2 .node ellipse,#mermaid-svg-vlE1PCF0Y1YRNNV2 .node polygon,#mermaid-svg-vlE1PCF0Y1YRNNV2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .rough-node .label text,#mermaid-svg-vlE1PCF0Y1YRNNV2 .node .label text,#mermaid-svg-vlE1PCF0Y1YRNNV2 .image-shape .label,#mermaid-svg-vlE1PCF0Y1YRNNV2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .rough-node .label,#mermaid-svg-vlE1PCF0Y1YRNNV2 .node .label,#mermaid-svg-vlE1PCF0Y1YRNNV2 .image-shape .label,#mermaid-svg-vlE1PCF0Y1YRNNV2 .icon-shape .label{text-align:center;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .node.clickable{cursor:pointer;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .arrowheadPath{fill:#333333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vlE1PCF0Y1YRNNV2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vlE1PCF0Y1YRNNV2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vlE1PCF0Y1YRNNV2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .cluster text{fill:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .cluster span{color:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vlE1PCF0Y1YRNNV2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .icon-shape,#mermaid-svg-vlE1PCF0Y1YRNNV2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .icon-shape p,#mermaid-svg-vlE1PCF0Y1YRNNV2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .icon-shape .label rect,#mermaid-svg-vlE1PCF0Y1YRNNV2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vlE1PCF0Y1YRNNV2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vlE1PCF0Y1YRNNV2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vlE1PCF0Y1YRNNV2 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

错误处理

ferror

feof

clearerr

文件定位

fseek

ftell

rewind

二进制读写

fread

fwrite

行读写

fgets

fputs

格式化读写

printf/fprintf/sprintf

scanf/fscanf/sscanf

字符读写

getc/fgetc

putc/fputc

ungetc

文件操作

fopen

fclose

remove

rename

freopen

3.2 文件操作函数

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;

/* 打开文件 */
fp = fopen("test.txt", "w");
if (fp == NULL) {
perror("fopen");
exit(1);
}

/* 写入数据 */
fprintf(fp, "Hello, World!\\n");
fputs("Another line\\n", fp);

/* 关闭文件 */
fclose(fp);

/* 重命名文件 */
rename("test.txt", "new.txt");

/* 删除文件 */
remove("new.txt");

return 0;
}

3.3 字符读写函数

函数说明
int fgetc(FILE *stream) 从流读取一个字符
int fputc(int c, FILE *stream) 向流写入一个字符
int ungetc(int c, FILE *stream) 将字符放回输入流
int getchar(void) 等价于 fgetc(stdin)
int putchar(int c) 等价于 fputc(c, stdout)

/* 文件复制 */
int c;
while ((c = fgetc(stdin)) != EOF)
fputc(c, stdout);

3.4 格式化输入/输出

printf 族:

函数输出目标
printf 标准输出
fprintf 指定流
sprintf 字符串
snprintf 字符串(带长度限制)
vprintf、vfprintf、vsprintf 使用 va_list 参数的版本

scanf 族:

函数输入来源
scanf 标准输入
fscanf 指定流
sscanf 字符串

char buffer[100];
int value = 42;
double pi = 3.14159;

/* 格式化输出 */
snprintf(buffer, sizeof(buffer), "value = %d, pi = %.2f", value, pi);
printf("%s\\n", buffer);

/* 格式化输入 */
int a, b;
sscanf("123 456", "%d %d", &a, &b);
printf("%d + %d = %d\\n", a, b, a + b);

3.5 二进制读写

struct record {
int id;
char name[20];
double score;
};

void write_records(const char *filename)
{
FILE *fp = fopen(filename, "wb");
struct record recs[] = {
{1, "Alice", 95.5},
{2, "Bob", 87.0}
};

fwrite(recs, sizeof(struct record), 2, fp);
fclose(fp);
}

void read_records(const char *filename)
{
FILE *fp = fopen(filename, "rb");
struct record rec;

while (fread(&rec, sizeof(rec), 1, fp) == 1) {
printf("ID: %d, Name: %s, Score: %.1f\\n",
rec.id, rec.name, rec.score);
}
fclose(fp);
}

3.6 文件定位

/* 获取文件大小 */
long get_file_size(const char *filename)
{
FILE *fp = fopen(filename, "rb");
if (!fp) return 1;

fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fclose(fp);
return size;
}

/* 随机访问 */
FILE *fp = fopen("data.bin", "rb+");
fseek(fp, 100, SEEK_SET); /* 定位到第100字节 */
fputc('X', fp); /* 覆盖该字节 */

3.7 错误处理

FILE *fp = fopen("nonexistent.txt", "r");
if (fp == NULL) {
perror("Error opening file");
/* 输出: Error opening file: No such file or directory */
}


四、<ctype.h> —— 字符处理

4.1 字符测试函数

函数测试条件
isalnum(c) 字母或数字
isalpha(c) 字母
iscntrl(c) 控制字符
isdigit(c) 十进制数字
isgraph(c) 可打印字符(不含空格)
islower(c) 小写字母
isprint(c) 可打印字符(含空格)
ispunct(c) 标点符号
isspace(c) 空白字符(空格、\\t、\\n、\\v、\\f、\\r)
isupper(c) 大写字母
isxdigit(c) 十六进制数字

4.2 字符转换函数

函数作用
tolower(c) 转换为小写
toupper(c) 转换为大写

4.3 使用示例

#include <ctype.h>
#include <stdio.h>

void string_toupper(char *s)
{
while (*s) {
*s = toupper((unsigned char)*s);
s++;
}
}

void print_char_info(int c)
{
printf("Char: '%c'\\n", c);
if (isalpha(c)) printf(" – is letter\\n");
if (isdigit(c)) printf(" – is digit\\n");
if (isspace(c)) printf(" – is whitespace\\n");
if (ispunct(c)) printf(" – is punctuation\\n");
}

int main()
{
char str[] = "Hello, World 123!";
print_char_info('A');
string_toupper(str);
printf("%s\\n", str);
return 0;
}

注意:ctype.h 中的函数参数是 int 类型,且期望值在 unsigned char 范围或 EOF。直接传入 char(可能为负值)可能导致未定义行为,建议强制转换为 unsigned char。


五、<string.h> —— 字符串处理

5.1 核心函数分类

#mermaid-svg-qKcxyReiVDTkG3gu{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-qKcxyReiVDTkG3gu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qKcxyReiVDTkG3gu .error-icon{fill:#552222;}#mermaid-svg-qKcxyReiVDTkG3gu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qKcxyReiVDTkG3gu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qKcxyReiVDTkG3gu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qKcxyReiVDTkG3gu .marker.cross{stroke:#333333;}#mermaid-svg-qKcxyReiVDTkG3gu svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qKcxyReiVDTkG3gu p{margin:0;}#mermaid-svg-qKcxyReiVDTkG3gu .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-qKcxyReiVDTkG3gu .cluster-label text{fill:#333;}#mermaid-svg-qKcxyReiVDTkG3gu .cluster-label span{color:#333;}#mermaid-svg-qKcxyReiVDTkG3gu .cluster-label span p{background-color:transparent;}#mermaid-svg-qKcxyReiVDTkG3gu .label text,#mermaid-svg-qKcxyReiVDTkG3gu span{fill:#333;color:#333;}#mermaid-svg-qKcxyReiVDTkG3gu .node rect,#mermaid-svg-qKcxyReiVDTkG3gu .node circle,#mermaid-svg-qKcxyReiVDTkG3gu .node ellipse,#mermaid-svg-qKcxyReiVDTkG3gu .node polygon,#mermaid-svg-qKcxyReiVDTkG3gu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qKcxyReiVDTkG3gu .rough-node .label text,#mermaid-svg-qKcxyReiVDTkG3gu .node .label text,#mermaid-svg-qKcxyReiVDTkG3gu .image-shape .label,#mermaid-svg-qKcxyReiVDTkG3gu .icon-shape .label{text-anchor:middle;}#mermaid-svg-qKcxyReiVDTkG3gu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qKcxyReiVDTkG3gu .rough-node .label,#mermaid-svg-qKcxyReiVDTkG3gu .node .label,#mermaid-svg-qKcxyReiVDTkG3gu .image-shape .label,#mermaid-svg-qKcxyReiVDTkG3gu .icon-shape .label{text-align:center;}#mermaid-svg-qKcxyReiVDTkG3gu .node.clickable{cursor:pointer;}#mermaid-svg-qKcxyReiVDTkG3gu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qKcxyReiVDTkG3gu .arrowheadPath{fill:#333333;}#mermaid-svg-qKcxyReiVDTkG3gu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qKcxyReiVDTkG3gu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qKcxyReiVDTkG3gu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qKcxyReiVDTkG3gu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qKcxyReiVDTkG3gu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qKcxyReiVDTkG3gu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qKcxyReiVDTkG3gu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qKcxyReiVDTkG3gu .cluster text{fill:#333;}#mermaid-svg-qKcxyReiVDTkG3gu .cluster span{color:#333;}#mermaid-svg-qKcxyReiVDTkG3gu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qKcxyReiVDTkG3gu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qKcxyReiVDTkG3gu rect.text{fill:none;stroke-width:0;}#mermaid-svg-qKcxyReiVDTkG3gu .icon-shape,#mermaid-svg-qKcxyReiVDTkG3gu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qKcxyReiVDTkG3gu .icon-shape p,#mermaid-svg-qKcxyReiVDTkG3gu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qKcxyReiVDTkG3gu .icon-shape .label rect,#mermaid-svg-qKcxyReiVDTkG3gu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qKcxyReiVDTkG3gu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qKcxyReiVDTkG3gu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qKcxyReiVDTkG3gu :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

内存操作

memset

memcpy

memmove

memcmp

memchr

其他

strlen

strspn

strcspn

strtok

strerror

搜索

strchr

strrchr

strstr

strpbrk

比较

strcmp

strncmp

连接

strcat

strncat

复制

strcpy

strncpy

5.2 复制与连接

#include <string.h>
#include <stdio.h>

int main()
{
char dest[100] = "Hello";
char src[] = " World";

/* 连接 */
strcat(dest, src);
printf("%s\\n", dest); /* Hello World */

/* 安全连接(限制长度) */
char buf[10] = "Hi";
strncat(buf, " there", sizeof(buf) strlen(buf) 1);
printf("%s\\n", buf); /* Hi there */

/* 复制 */
char copy[100];
strcpy(copy, dest);
printf("%s\\n", copy);

/* 安全复制 */
strncpy(buf, "VeryLongString", sizeof(buf) 1);
buf[sizeof(buf) 1] = '\\0';

return 0;
}

5.3 比较

#include <string.h>

int main()
{
char s1[] = "apple";
char s2[] = "Apple";
char s3[] = "apples";

printf("strcmp(\\"%s\\", \\"%s\\") = %d\\n", s1, s2, strcmp(s1, s2));
printf("strcmp(\\"%s\\", \\"%s\\") = %d\\n", s1, s3, strcmp(s1, s3));

/* 忽略大小写比较(非标准,需自行实现或使用 strcasecmp) */
/* 前缀比较 */
if (strncmp(s1, s3, 5) == 0)
printf("First 5 chars match\\n");

return 0;
}

5.4 搜索

#include <string.h>
#include <stdio.h>

int main()
{
char str[] = "Hello, World!";
char *p;

/* 查找字符首次出现 */
p = strchr(str, 'W');
if (p) printf("Found 'W' at position %ld\\n", p str);

/* 查找字符最后一次出现 */
p = strrchr(str, 'l');
if (p) printf("Last 'l' at position %ld\\n", p str);

/* 查找子串 */
p = strstr(str, "World");
if (p) printf("Found 'World' at position %ld\\n", p str);

/* 查找任意字符 */
p = strpbrk(str, "oe");
if (p) printf("First vowel at position %ld\\n", p str);

return 0;
}

5.5 长度与杂项

char *s = "Hello";
printf("Length: %zu\\n", strlen(s)); /* 5 */

/* strspn: 前缀中只包含指定字符的长度 */
size_t n = strspn("123abc", "0123456789");
printf("%zu\\n", n); /* 3 */

/* strcspn: 前缀中不包含指定字符的长度 */
n = strcspn("abc123", "0123456789");
printf("%zu\\n", n); /* 3 */

5.6 strtok —— 字符串分割

#include <string.h>
#include <stdio.h>

int main()
{
char str[] = "apple,banana,orange,grape";
char *token;

token = strtok(str, ",");
while (token != NULL) {
printf("%s\\n", token);
token = strtok(NULL, ",");
}

return 0;
}

⚠️ 注意:strtok 会修改原字符串(插入 \\0),且不可重入(多线程不安全)。可用 strtok_r 代替。

5.7 内存操作函数

函数作用
memset(s, c, n) 将 s 的前 n 字节设置为 c
memcpy(dest, src, n) 复制 n 字节(不处理重叠)
memmove(dest, src, n) 复制 n 字节(处理重叠)
memcmp(s1, s2, n) 比较 n 字节
memchr(s, c, n) 在 n 字节内查找 c

#include <string.h>
#include <stdio.h>

int main()
{
int arr[5] = {1, 2, 3, 4, 5};
int copy[5];

/* 复制整块内存 */
memcpy(copy, arr, sizeof(arr));

/* 清零 */
memset(copy, 0, sizeof(copy));

/* 查找字节 */
char data[] = {0x01, 0x02, 0x03, 0xFF, 0x05};
void *p = memchr(data, 0xFF, sizeof(data));
if (p) printf("Found 0xFF\\n");

return 0;
}


六、<stdlib.h> —— 实用工具

6.1 函数分类

类别函数
数值转换 atoi、atol、atof、strtol、strtoul、strtod
内存管理 malloc、calloc、realloc、free
随机数 rand、srand
程序控制 exit、atexit、abort、system
搜索与排序 bsearch、qsort
环境 getenv
算术 abs、labs、div、ldiv

6.2 数值转换

#include <stdlib.h>
#include <stdio.h>

int main()
{
/* 简单转换 */
int i = atoi("123");
double d = atof("3.14159");
long l = atol("123456789");

printf("%d, %f, %ld\\n", i, d, l);

/* 带错误检测的转换 */
char *endptr;
long val = strtol("123abc", &endptr, 10);
printf("Value: %ld, Remainder: %s\\n", val, endptr);

/* 不同进制 */
printf("%ld\\n", strtol("FF", NULL, 16)); /* 255 */
printf("%ld\\n", strtol("077", NULL, 8)); /* 63 */

return 0;
}

6.3 内存管理

#include <stdlib.h>
#include <string.h>

int main()
{
int *p;

/* malloc: 分配未初始化的内存 */
p = malloc(100 * sizeof(int));
if (p == NULL) {
/* 处理分配失败 */
return 1;
}

/* calloc: 分配并清零 */
int *q = calloc(100, sizeof(int));

/* realloc: 调整大小 */
p = realloc(p, 200 * sizeof(int));

/* 释放 */
free(p);
free(q);

return 0;
}

6.4 随机数

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
/* 设置随机种子 */
srand((unsigned int)time(NULL));

/* 生成随机数 */
for (int i = 0; i < 5; i++)
printf("%d\\n", rand());

/* 限定范围 [0, N-1] */
int dice = rand() % 6 + 1; /* 1-6 */
printf("Dice: %d\\n", dice);

return 0;
}

6.5 程序控制

#include <stdlib.h>
#include <stdio.h>

void cleanup(void)
{
printf("Cleanup function called\\n");
}

int main()
{
/* 注册退出时调用的函数 */
atexit(cleanup);

/* 正常退出 */
exit(EXIT_SUCCESS);

/* 异常退出 */
/* abort(); */

/* 执行系统命令 */
/* system("ls -l"); */

return 0;
}

6.6 搜索与排序

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int compare_int(const void *a, const void *b)
{
return *(int *)a *(int *)b;
}

int main()
{
int arr[] = {5, 2, 8, 1, 9, 3};
int n = sizeof(arr) / sizeof(arr[0]);

/* 快速排序 */
qsort(arr, n, sizeof(int), compare_int);

for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\\n");

/* 二分查找 */
int key = 5;
int *found = bsearch(&key, arr, n, sizeof(int), compare_int);
if (found)
printf("Found %d at index %ld\\n", key, found arr);

return 0;
}

6.7 环境变量

#include <stdlib.h>
#include <stdio.h>

int main()
{
char *path = getenv("PATH");
if (path)
printf("PATH = %s\\n", path);
return 0;
}


七、<math.h> —— 数学函数

7.1 函数分类

类别函数
三角函数 sin、cos、tan、asin、acos、atan、atan2
双曲函数 sinh、cosh、tanh
指数对数 exp、log、log10
幂函数 pow、sqrt
取整 ceil、floor
绝对值 fabs
取模 fmod
分解 frexp、ldexp、modf

7.2 使用示例

#include <math.h>
#include <stdio.h>

int main()
{
double x = 2.0;
double y = 3.0;

/* 幂运算 */
printf("pow(%.1f, %.1f) = %.1f\\n", x, y, pow(x, y));
printf("sqrt(%.1f) = %.6f\\n", x, sqrt(x));

/* 三角函数(弧度) */
double pi = 3.1415926535;
printf("sin(pi/2) = %.2f\\n", sin(pi / 2));
printf("cos(0) = %.2f\\n", cos(0));

/* 对数 */
printf("log(%f) = %f\\n", exp(1.0), log(exp(1.0)));
printf("log10(100) = %f\\n", log10(100));

/* 取整 */
printf("ceil(3.14) = %.0f\\n", ceil(3.14));
printf("floor(3.14) = %.0f\\n", floor(3.14));

/* 绝对值 */
printf("fabs(-3.14) = %.2f\\n", fabs(3.14));

/* 取模(浮点数) */
printf("fmod(10.5, 3.2) = %.2f\\n", fmod(10.5, 3.2));

return 0;
}

注意:使用 math.h 中的函数时,通常需要在编译时链接数学库:gcc prog.c -lm。


八、<time.h> —— 日期与时间

8.1 主要类型与函数

类型/函数说明
time_t 日历时间类型
clock_t 处理器时间类型
struct tm 分解时间结构
time() 获取当前日历时间
clock() 获取处理器时间
difftime() 计算时间差
mktime() 将 struct tm 转换为 time_t
gmtime() time_t → UTC 分解时间
localtime() time_t → 本地分解时间
asctime() struct tm → 字符串
ctime() time_t → 字符串
strftime() 格式化时间输出

8.2 使用示例

#include <time.h>
#include <stdio.h>

int main()
{
time_t now;
struct tm *tm_info;
char buffer[100];

/* 获取当前时间 */
now = time(NULL);
printf("Seconds since epoch: %ld\\n", (long)now);

/* 转换为可读字符串 */
printf("ctime: %s", ctime(&now));

/* 分解时间 */
tm_info = localtime(&now);
printf("Year: %d\\n", tm_info->tm_year + 1900);
printf("Month: %d\\n", tm_info->tm_mon + 1);
printf("Day: %d\\n", tm_info->tm_mday);
printf("Hour: %d\\n", tm_info->tm_hour);

/* 自定义格式化 */
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_info);
printf("Formatted: %s\\n", buffer);

/* 测量程序运行时间 */
clock_t start = clock();
/* … 被测代码 … */
clock_t end = clock();
printf("Time: %.2f seconds\\n",
(double)(end start) / CLOCKS_PER_SEC);

return 0;
}


九、<assert.h> —— 诊断

#include <assert.h>

int divide(int a, int b)
{
assert(b != 0); /* 如果条件为假,程序终止 */
return a / b;
}

int main()
{
divide(10, 2); /* OK */
/* divide(10, 0); 会触发断言失败 */
return 0;
}

定义 NDEBUG 宏可以禁用所有断言:gcc -DNDEBUG prog.c。


十、<stdarg.h> —— 可变参数

#include <stdarg.h>
#include <stdio.h>

/* 求任意数量整数的和 */
int sum(int count, ...)
{
va_list ap;
int total = 0;

va_start(ap, count);
for (int i = 0; i < count; i++)
total += va_arg(ap, int);
va_end(ap);

return total;
}

int main()
{
printf("Sum: %d\\n", sum(3, 10, 20, 30));
printf("Sum: %d\\n", sum(5, 1, 2, 3, 4, 5));
return 0;
}


十一、<stddef.h> 与 <limits.h> / <float.h>

11.1 <stddef.h> 通用定义

名称说明
NULL 空指针常量
size_t sizeof 返回的无符号整型
ptrdiff_t 指针相减结果的有符号整型
offsetof(type, member) 结构成员偏移量

11.2 <limits.h> 整型限制

常量含义
CHAR_BIT char 的位数
CHAR_MIN / CHAR_MAX char 的范围
INT_MIN / INT_MAX int 的范围
LONG_MIN / LONG_MAX long 的范围

11.3 <float.h> 浮点限制

常量含义
FLT_MIN / FLT_MAX float 范围
DBL_MIN / DBL_MAX double 范围
FLT_EPSILON 最小精度

十二、其他头文件简表

头文件主要功能
<errno.h> 定义 errno 和错误码常量
<locale.h> 本地化设置 setlocale
<setjmp.h> 非局部跳转 setjmp/longjmp
<signal.h> 信号处理 signal/raise

十三、标准库函数速查总表

#mermaid-svg-bha0Z87ICcdJ3JAD{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bha0Z87ICcdJ3JAD .error-icon{fill:#552222;}#mermaid-svg-bha0Z87ICcdJ3JAD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bha0Z87ICcdJ3JAD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bha0Z87ICcdJ3JAD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bha0Z87ICcdJ3JAD .marker.cross{stroke:#333333;}#mermaid-svg-bha0Z87ICcdJ3JAD svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bha0Z87ICcdJ3JAD p{margin:0;}#mermaid-svg-bha0Z87ICcdJ3JAD .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD .cluster-label text{fill:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD .cluster-label span{color:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD .cluster-label span p{background-color:transparent;}#mermaid-svg-bha0Z87ICcdJ3JAD .label text,#mermaid-svg-bha0Z87ICcdJ3JAD span{fill:#333;color:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD .node rect,#mermaid-svg-bha0Z87ICcdJ3JAD .node circle,#mermaid-svg-bha0Z87ICcdJ3JAD .node ellipse,#mermaid-svg-bha0Z87ICcdJ3JAD .node polygon,#mermaid-svg-bha0Z87ICcdJ3JAD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bha0Z87ICcdJ3JAD .rough-node .label text,#mermaid-svg-bha0Z87ICcdJ3JAD .node .label text,#mermaid-svg-bha0Z87ICcdJ3JAD .image-shape .label,#mermaid-svg-bha0Z87ICcdJ3JAD .icon-shape .label{text-anchor:middle;}#mermaid-svg-bha0Z87ICcdJ3JAD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bha0Z87ICcdJ3JAD .rough-node .label,#mermaid-svg-bha0Z87ICcdJ3JAD .node .label,#mermaid-svg-bha0Z87ICcdJ3JAD .image-shape .label,#mermaid-svg-bha0Z87ICcdJ3JAD .icon-shape .label{text-align:center;}#mermaid-svg-bha0Z87ICcdJ3JAD .node.clickable{cursor:pointer;}#mermaid-svg-bha0Z87ICcdJ3JAD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bha0Z87ICcdJ3JAD .arrowheadPath{fill:#333333;}#mermaid-svg-bha0Z87ICcdJ3JAD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bha0Z87ICcdJ3JAD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bha0Z87ICcdJ3JAD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bha0Z87ICcdJ3JAD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bha0Z87ICcdJ3JAD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bha0Z87ICcdJ3JAD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bha0Z87ICcdJ3JAD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bha0Z87ICcdJ3JAD .cluster text{fill:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD .cluster span{color:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bha0Z87ICcdJ3JAD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bha0Z87ICcdJ3JAD rect.text{fill:none;stroke-width:0;}#mermaid-svg-bha0Z87ICcdJ3JAD .icon-shape,#mermaid-svg-bha0Z87ICcdJ3JAD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bha0Z87ICcdJ3JAD .icon-shape p,#mermaid-svg-bha0Z87ICcdJ3JAD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bha0Z87ICcdJ3JAD .icon-shape .label rect,#mermaid-svg-bha0Z87ICcdJ3JAD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bha0Z87ICcdJ3JAD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bha0Z87ICcdJ3JAD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bha0Z87ICcdJ3JAD :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

进阶

setjmp/longjmp

signal/raise

va_list

locale

常用

fgets/fputs

fread/fwrite

isalpha/isdigit

strchr/strstr

qsort/bsearch

rand/srand

最常用

printf/scanf

fopen/fclose

malloc/free

strcpy/strcmp

atoi/atof


十四、学习检查清单 ✅

检查项状态
✅ 知道C标准库包含哪些头文件
✅ 掌握 stdio.h 的核心文件操作函数
✅ 能区分 printf/sprintf/fprintf
✅ 掌握 string.h 的常用字符串函数
✅ 知道 strtok 的副作用和替代方案
✅ 理解 memcpy 与 memmove 的区别
✅ 会用 malloc/calloc/realloc/free
✅ 会用 qsort 和 bsearch
✅ 了解 math.h 常用函数及编译链接方法
✅ 会用 time.h 获取和格式化时间
✅ 知道 assert 的用法和 NDEBUG 宏
✅ 会写可变参数函数

十五、常见陷阱与注意事项 ⚠️

  • strcpy/strcat 不检查缓冲区大小:优先使用 strncpy/strncat 或 snprintf。

  • gets 已被移除:永远不要使用,用 fgets 代替。

  • malloc 返回的内存未初始化:包含垃圾值,用 calloc 或手动 memset。

  • 忘记 free 导致内存泄漏:每次 malloc 都要有对应的 free。

  • scanf 的 %s 不检查长度:指定最大宽度,如 %99s。

  • fflush(stdin) 行为未定义:不要用于输入流。

  • strtok 会修改原字符串:多线程下用 strtok_r。

  • 数学函数需要链接 -lm:gcc prog.c -lm。

  • assert 在发布版本中可能被禁用:不要依赖 assert 进行正常的错误检查。


  • 十六、附录C预告 📌

    下一部分将进入 “附录C 变更总结” 的学习。

    附录C详细记录了ANSI C相对于早期K&R C(第一版)所做的所有变更,包括:

    • ✅ 新增的关键字(const、signed、volatile、enum、void)
    • ✅ 函数原型的引入
    • ✅ 类型规则的严格化
    • ✅ 标准库的扩充
    • ✅ 预处理器的增强
    • ✅ 移植性改进

    理解这些变化对于阅读旧代码和确保代码的可移植性至关重要。

    附录C核心内容预览:

    /* K&R 第一版风格(不推荐) */
    double sin(); /* 无参数类型检查 */
    double power(x, n) /* 旧式参数声明 */
    double x;
    int n;
    { /* … */ }

    /* ANSI C 风格(推荐) */
    double sin(double); /* 函数原型 */
    double power(double x, int n) /* 现代函数定义 */
    { /* … */ }

    附录C将帮助你理解C语言的演进历程,以及为什么现代C代码要以ANSI C风格编写!🚀


    本文为个人学习笔记,仅用于知识分享。如有错误,欢迎指正。
    👍🏻 点赞 + 收藏 + 分享,让更多开发者看到这篇深度解析!❤️ 如果觉得有用,请给个赞支持一下作者!

    赞(0)
    未经允许不得转载:171主机测评 » 《C程序设计语言》读书笔记11: 附录 B 标准库
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址