The Standard C Library
--------------经典的基础
C的标志库函数是学习和使用C语言的基础,是编写经典C程序的基础,是学习其他计算机知识的基础.C标志库中一共包含了15个头文件:
<assert.h> <ctype.h> <stdio.h> <stdlib.h> <string.h> <limits.h> <float.h> <time.h>
<math.h> <setjmp.h> <signal.h> <stdarg.h> <stddef.h> <errno.h> <locale.h>
1:<assert.h>
NDEBUG
NDEBUG宏是调试开关,当使用#include NDEBUG时程序为非调试状态,这种状态下调试宏assert不起作用。
assert
调试宏assert只有在程序处于调试状态下才发挥作用,它的使用形式如下:assert(expression);当条件为假时会在屏幕中输出如下的调试信息:“Assertion failed:expression, file xyz, line nnn”,其中xyp是assert所在的文件名,nnn为assert在该文件中的位置。
assert宏还有许多用法,请参看《Writing Clean Code》第二章设计并使用断言。
2:<stdio.h>
<stdio.h>下面的类型,宏,函数都是分类的
其他:
size_t sizeof返回的值
NULL 空指针
文件:
FILE 文件的类型
fpos_t 文件中指针的位置
EOF 文件末尾<0
FILENAME_MAX 文件名最大值>0
FOPEN_MAX 同时打开文件的最大值>8
SEEK_SET 文件头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
打开文件
FILE *fopen(const char *filename,const char *mode);
更改当前流相关的文件
FILE *freopen(const char *filename,const char *mode,FILE *stream);
关闭文件
int fclose(FILE *stream);
清除流中的错误标志或文件末尾标志
void clearerr(FILE *stream);
测试流上的文件末尾标志
int feof(FILE *stream);
测试流上的错误标志
int ferror(FILE *stream);
将一个字符放回到流中
int ungetc(int c, FILE *stream);
从流中读一个字符
int fgetc(FILE *stream);
int getc(FILE *stream);/* 与fgetc相同但是可以用宏实现该函数 */
写一个字符到一个流
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
从流中获取一个字符串
char *fgets(char *s, int n, FILE *stream);
写一个字符串到一个流
int fputs(const char *s, FILE *stream);
打印一个格式化数据到一个流
int fprintf(FILE *stream,const char *format, ...);
使用一个参量列表指针格式化到流的数据
int vfprintf(FILE *stream,const char *format, va_list ap);
从一个流中读取格式化数据
int fscanf(FILE *stream, const char *format, ...);
从一个流中读数据
size_t fread(char *buffer,size_t size,size_t count,FILE *stream);
写数据到一个流
int fwrite(const char *buffer, size_t size, size_t count,
FILE *stream);
获取流的文件位置指示符
int fgetpos(FILE *stream, fpos_t *pos);
设置流位置指示符
int fsetpos(FILE *stream, const fpos_t *pos);
移动文件指针到一个指定的位置
int fseek(FILE *stream, long offset, int origin);
获得文件指针相对于文件头的偏移量
long ftell(FILE *stream);
重新定位一个文件指针到文件开头
void rewind(FILE *steam);
删除一个文件
int remove(const char *path);
更改一个文件或目录
int rename(const char *oldname, const char *newname);
缓冲区:
_IOFBF
_IOLBF
_IONBF 缓冲区类型
BUFSIZE 缓冲区尺寸>=256
刷新一个流并清空与流相关的缓冲区的内容
int fflush(FILE *stream);
控制流的缓冲区,已经被setvbuf代替
void setbuf(FILE *stream, char *buffer);
控制流的缓冲区类型和缓冲区大小
int setvbuf(FILE *stream, char *buffer, int mode, size_t size);
将一个格式化数据写入一个字符串
int sprintf(char *buffer, const char *format, ...);
从字符串中读格式化数据
int sscanf(const char *buffer, const char *format, ...);
从参量列表指针格式化到字符串
int vsprintf(char *buffer, const char *format, va_list ap);
临时文件
L_tmpnam 临时文件名长度>0
TMP_MAX 产生唯一文件名的最大数目>=25
以二进制读写的方式建立一个临时文件
FILE *tmpfile(void);
建立一个临时文件名
char *tmpname(char *string);
标准流:
stdin 标准输入流
stdout 标准输出流
stderr 标准错误输出流
从stdin获得一个字符
int getchar(void);
把字符写道stdout
int putchar(int c);
从stdin中获取一行
char *gets(char *buffer);
写一个字符串到stdout
int puts(const char *string);
打印一个错误消息到stderr
void perror(const char *error);
打印格式化数据到stdout
int printf(const char *format, ...);
从stdin读格式化数据
int scanf(const char *format, ...);
从参量列表指针格式化到stdout
int vprintf(const char *format, va_list ap);
3:<stdlib.h>
<stdlib.h>中定义的函数都是工具类的函数可以分类学习
其他:
NULL
size_t
执行一个系统命令
int system(const char *command);
程序控制:
EXIT_SUCCESS