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


