C
标准库
C
标准库.........................................................................................................................................1
1
输入与输出
<stdio.h>..................................................................................................................1
2
字符类测试
<ctype.h>...............................................................................................................19
3
字符串½数
<string.h>...............................................................................................................22
4
数学½数
<math.h>....................................................................................................................29
5
实用½数
<stdlib.h>...................................................................................................................35
6
诊断
<assert.h>..........................................................................................................................43
7
变长变元表
<stdarg.h>..............................................................................................................44
8
非局部跳½
<setjmp.h>.............................................................................................................45
9
信号处理
<signal.h>...................................................................................................................46
10
日期与时间½数
<time.h>.......................................................................................................48
11
由实现定义的限制
<limits.h>
和
<float.h>................................................................................52
本文包括大部分 C 标准库½数,½没有列出一些用途有限的½数以及某些可以简单的从其
他½数合成的½数,也没有包含多字节和本地化½数。
标准库中的各个½数、类型以及宏分别在以下标准头文件中说明:
<assert.h>
<ctype.h>
<errno.h>
<float.h>
<limits.h>
<locale.h>
<math.h>
<setjmp.h>
<signal.h>
<stdarg.h>
<stddef.h>
<stdio.h>
<stdlib.h>
<string.h>
<time.h>
1 输入与输出<stdio.h>
头文件<stdio.h>定义了用于输入和输出的½数、
类型和宏。
最重要的类型是用于声明文件指
针的 FILE。另外两个常用的类型是 size_t 和 fpos_t,size_t 是由运算符 sizeof 产生的无
符号整类型;fpos_t 类型定义½够唯一说明文件中的每个½½的对象。由头部定义的最有
用的宏是 EOF,其值代表文件的结尾。
1.1 文件操½
1.1.1 fopen
#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
返回:成功为 FILE 指针,失败为 NULL
打开以 filename 所指内容为名字的文件,返回与之关联的流。
mode 决定打开的方式,可选值如下:
"r"
"w"
"a"
"rb"
"wb"
"ab"
"r+"
"w+"
"a+"
"rb+"或"r+b"
"wb+"或"w+b"
"ab+"或"a+b"
打开文本文件用于读
创建文本文件用于写,并删除已存在的内容(如果有的话)
添加;打开或创建文本文件用于在文件末尾写
打开二进制文件用于读
创建二进制文件用于写,并删除已存在的内容(如果有的话)
添加;打开或创建二进制文件用于在文件末尾写
打开文本文件用于更新(即读和写)
创建文本文件用于更新,并删除已存在的内容(如果有的话)
添加;打开或创建文本文件用于更新和在文件末尾写
打开二进制文件用于更新(即读和写)
创建二进制文件用于更新,并删除已存在的内容(如果有的话)
添加;打开或创建二进制文件用于更新和在文件末尾写
后六种方式允许对同一文件进行读和写,要注意的是,在写操½和读操½的交替过程中,
必须调用 fflush()或文件定½½数如 fseek()、fsetpos()、rewind()等。
文件名 filename 的长度最大为 FILENAME_MAX 个字符,一次最多可打开 FOPEN_MAX 个文件
(在<stdio.h>中定义)。
1.1.2 freopen
#include <stdio.h>
FILE *freopen(const char *filename, const char *mode,
FILE *stream);
返回:成功为 stream,失败为 NULL
以 mode 指定的方式打开文件 filename,并½该文件与流 stream 相关联。freopen()先尝试
关闭与 stream 关联的文件,不管成功与否,½继续打开新文件。
该½数的主要用途是把系统定义的标准流 stdin、stdout、stderr 重定向到其他文件。
1.1.3 fflush
#include <stdio.h>
int fflush(FILE *stream);
返回:成功为 0,失败返回 EOF
对输出流(写打开),fflush()用于将已写到缓冲区½尚未写出的全部数据½写到文件中;
对输入流,其结果未定义。如果写过程中发生错误则返回 EOF,正常则返回 0。
fflush(NULL)用于刷新所有的输出流。
程序正常结束或缓冲区满时,缓冲区自动清仓。
1.1.4 fclose
#include <stdio.h>
int flcose(FILE *stream);
返回:成功为 0,失败返回 EOF
刷新
stream 的全部未写出数据,丢弃任½未读的缓冲区内的输入数据并释放自动分配的缓
冲区,最后关闭流。
1.1.5 remove
#include <stdio.h>
int remove(const char *filename);
返回:成功为 0,失败为非 0 值
删除文件 filename。
1.1.6 rename
#include <stdio.h>
int rename(const char *oldfname, const char *newfname);
返回:成功为 0,失败为非 0 值
把文件的名字从 oldfname
改为
newfname。
1.1.7 tmpfile
#include <stdio.h>
FILE *tmpfile(void);
返回:成功为流指针,失败为 NULL
以方式"wb+"创建一个临时文件,并返回该流的指针,该文件在被关闭或程序正常结束时被
自动删除。
1.1.8 tmpnam
#include <stdio.h>
char *tmpnam(char s[L_tmpnam]);
返回:成功为非空指针,失败为 NULL
若参数
s 为 NULL(即调用 tmpnam(NULL)),½数创建一个不同于现存文件名字的字符串,并
返回一个指向一内部静态数组的指针。
若
s 非空,则½数将所创建的字符串存储在数组 s 中,并将它½为½数值返回。s 中至少要
有 L_tmpnam 个字符的空间。
tmpnam ½数在每次被调用时均生成不同的名字。在程序的执行过程中,最多只½确保生成
TMP_MAX
个不同的名字。注意 tmpnam ½数只是用于创建一个名字,而不是创建一个文件。
1.1.9 setvbuf
#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
返回:成功返回 0,失败返回非 0
控制流
stream 的缓冲区,这要在读、写以及其他任½操½之前设½。
如果 buf 非空,则将 buf 指向的区域½为流的缓冲区,如果 buf 为 NULL,½数将自行分配
一个缓冲区。
size 决定缓冲区的大小。
mode 指定缓冲的处理方式,有如下值:
•
•
•
_IOFBF,进行完全缓冲;
_IOLBF,对文本文件表示行缓冲;
_IOLNF,不设½缓冲。
1.1.10 setbuf
评论