C语言标准库
C-1 标准输出输入函数
¨?FILE* fopen(const char* filename, const char* mode):使用mode 模式
开启参数filename 的档案,传回调案串流,失败传回NULL.
¨?FILE* freopen(const char* filename, const char* mode, FILE* stream) :
关闭档案后重新开启档案.打开指定文件,并关联到stream返回stream.出错返回NULL
¨?int fflush(FILE* stream):清除缓冲区的内容,成功传回0,失败传回
EOF.
¨?int fclose(FILE* stream):关闭档案.出错返回EOF否则返回0
¨?int remove(const char* filename):删除参数的档案,失败传回非零
值.
¨?int rename(const char* oldname, const char* newname):将文件名
oldname 改为newname,失败传回非零值.
¨?FILE* tmpfile():建立"wb+"模式的临时文件,当结束程序后就会关
闭且删除此档案,并返回与之关联的流.
¨?char* tmpname(char s[L_tmpnam]):指定临时文件的名称为s.
¨?int setvbuf(FILE* stream, char* buf, int mode, size_t size):指定串流暂存区尺寸size,使用mode参数值_IOFBF(0)为完整暂存区、_IOLBF(1) 是
线性暂存区或_IONBF(2) 没有暂存区.出错返回非0.
¨?void setbuf(FILE* stream, char* buf):指定串流的暂存区为参数buf.
¨?int fprintf(FILE* stream, const char* format, ...):将格式化字符串写入文件
案串流.
¨?int printf(const char* format, ...):在标准输出显示格式化字符串.
¨?int sprintf(char* s, const char* format, ...):将格式化字符串输出到字符串
s.
¨?int fscanf(FILE* stream, const char* format, ...):从档案串流读取指定
格式的数据.
¨?int scanf(const char* format, ...):从标准输入读取指定格式的数据.
¨?int sscanf(char* s, const char* format, ...):从字符串s 读取指定格式的资料.
¨?int fgetc(FILE* stream):从档案串流读取一个字符.
¨?char* fgets(char* s, int n, FILE* stream):从档案串流读取一个字符串.
¨?int fputc(int c, FILE* stream):写入一个字符到档案.
¨?char* fputs(const char* s, FILE* stream):写入一个字符串到档案.
¨?int getc(FILE* stream):从档案串流读取一个字符.
¨?int getchar(void):从标准输入读取一个字符.
¨?char* gets(char* s):从标准输入读取一个字符串.
¨?int putc(int c, FILE* stream):写入一个字符到档案.
¨?int putchar(int c):在标准输出显示一个字符.
¨?int puts(const char* s):在标准输出显示一个字符串.
¨?int ungetc(int c, FILE* stream):将一个字符放回调案串流.
¨?size_t fread(void* ptr, size_t size, size_t nobj, FILE* stream):从档案读
取指定大小的数据.
¨?size_t fwrite(const void* ptr, size_t size, size_t nobj, FILE* stream):将
指定大小的数据写入档案.
¨?int fseek(FILE* stream, long offset, int origin):移动档案指标到offset位移量, 其方向是origin 参数值SEEK_SET(0) 的档案开头、
SEEK_CUR(1) 是目前位置或SEEK_END(2) 文件尾.
¨?long ftell(FILE* stream):目前档案指针的位置.
¨?void rewind(FILE* stream):重设档案指标到档头.
¨?int feof(FILE* stream):是否到达档尾.
¨?int ferror(FILE* stream):是否档案串流产生错误.
C-2 字符检查函数
¨?int isalnum(int c):isalpha(c)或isdigit(c)的字符.
¨?int isalpha(int c):isupper(c)或islower(c)的字符.
¨?int iscntrl(int c):是否是ASCII 控制字符.
¨?int isdigit(int c):是否是数字.
¨?int isgraph(int c):是否是显示字符,不含空格符.
¨?int islower(int c):是否是小写字符.
¨?int isprint(int c):是否是显示字符0x20 (' ')到0x7E ('~').
¨?int ispunct(int c):是否是显示字符,不包含空白、字母、数字字符.
¨?int isspace(int c):是否是空格符.
¨?int isupper(int c):是否是大写字符.
¨?int isxdigit(int c):是否是十六进制字符.
¨?int tolower(int c):转换成小写字符.
¨?int toupper(int c):转换成大写字
C-3 字符串函数
¨?char* strcpy(char* s, const char* ct):将字符串ct 复制到字符串s.
¨?char* strncpy(char* s, const char* ct, size_t n):将字符串ct 前n 个字符
复制到字符串s.
¨?char* strcat(char* s, const char* ct):链接字符串ct 到字符串s 之后.
¨?char* strncat(char* s, const char* ct, size_t n):链接字符串ct 前n 个字符
到字符串s.
¨?int strcmp(const char* cs, const char* ct):比较字符串cs 和ct.
¨?int strncmp(const char* cs, const char* ct, size_t n):比较字符串cs 和ct
的前n 个字符.
¨?char* strchr(const char* cs, int c):传回字符c 第一次出现在字符串cs 位
置的指标.
¨?char* strrchr(const char* cs, int c):传回字符c 第后一次出现在字符串cs
位置的指针.
¨?char* strpbrk(const char* cs, const char* ct):传回字符串ct 任何字符在字符串cs 第一次出现的位置指针.
¨?char* strstr(const char* cs, const char* ct):传回字符串ct 在字符串cs 第一次出现的位置指针.
¨?size_t strlen(const char* cs):传回字符串cs 的长度.
¨?char* strerror(int n):传回指定错误代码的说明文字内容.
¨?char* strtok(char* s, const char* ct):以字符串ct 的任何字符为分隔字符,找寻字符串s 中下一个token 记号.第一次调用,s为非空.它搜索s,找到不包含ct中字符的第一个记号,将s中的下一个字符替换为’/0’,并返回指向记号的指针.随后,每次调用时,(由s的值是否为NULL指示),均返回下一个不包含ct中字符的记号.当s中没有这样的记号时,返回NULL.每次调用时字符串ct可以不同.
¨?void* memcpy(void* s, const void* ct, size_t n):从位置ct 复制n 个字元到位置s,传回s.
¨?void* memmove(void* s, const void* ct, size_t n):从位置ct 搬移n 个
字符到位置s,传回s.
¨?int memcmp(const void* cs, const void* ct, size_t n):比较位置ct 和位置cs 的前n 个字符.
¨?void* memchr(const void* cs, int c, size_t n):传回cs 位置开始前n 个
字符第一次出现字符c 的位置指针.
¨?void* memset(vo id* s, int c, size_t n):取代cs 位置开始前n 个字符成为字符c,传回位置指针s.
C-4 数学函数
¨?double exp(double x):自然数的指数e^x.
¨?double log(double x):自然对数logx
¨?double log10(double x):十为底的对数log10x.
¨?double pow(double x, double y):传回参数x为底参数y 的次方值x^y.
¨?double sqrt(double x):参数x 的平方根.
¨?double ceil(double x):传回大于或等于参数x 的最小double 整数.
¨?double floor(double x):传回小于或等于参数x 的最大double 整数.
¨?double fabs(double x):传回参数x 的绝对值.
¨?hypot(double x, double y):传回√(x^2+y^2)公式的值
¨?double ldexp(double x, int n):x 乘以2 的n 次方是x*2^n.
¨?double frexp(double x, int* exp):将参数x 的浮点数分解成尾数和指
标,x = m*2^exp,传回m值的尾数,将指数存入参数exp.
¨?double modf(double x, double* ip):将浮点数x 分解成整数和小数部
分,传回小数部分,将整数部分存入参数ip.
¨?double fmod(double x, double y):如果y 为非零值,传回浮点数x/y
的余数.
¨?double sin(double x):正弦函数.
¨?double cos(double x):余弦函数.
¨?double tan(double x):正切函数.
¨?double asin(double x):反正弦函数.
¨?double acos(double x):反余弦函数.
¨?double atan(double x):反正切函数.
¨?double atan2(double y, double x):参数y/x 的反正切函数值.
¨?double sinh(double x):hyperbolic 正弦函数,sinh(x)=(e^x-e^(-x))/2.
¨?double cosh(double x) : hyperbolic 余弦函数, cosh(x)=(e^x+e^(-
x))/2.
¨?double tanh(double x) : hyperbolic 正切函数, tanh(x)=(e^x-e^(-
x))/(e^2+e^(-x)).
C-5 日期/时间函数
¨?clock_t clock(void):传回程序开始执行后所使用的CPU 时间,以
ticks 为单位,除以常数CLK_TCK就是秒数.
¨?time_t time(time_t* tp):传回目前的历法时间(Calendar Time ),也
会指定给参数的tp 指标,如为无效时间,传回-1.
¨?double difftime(time_t time2, time_t time1):传回参数time2 和time1
的时间差,即time2-time1.
¨?time_t mktime(struct tm* tp):将参数*tp 的当地时间改为历法时间,
如果不能转换传回-1.
¨?char* asctime(const struct tm* tp):传回参数tm 结构指针转换成日期/
时间格式的字符串,字符串最后有换行符/n.
¨?char* ctime(const time_t* tp):传回参数time_t 指标转换成当地日期/
时间的字符串,字符串最后有换行符/n.
¨?struct tm* gmtime(const time_t* tp):传回将参数的time_t 指标转换成
UTC(Coordinated Universal Time )日期/时间的tm 结构指针.
¨?struct tm* localtime(const time_t* tp):传回将参数的time_t 指标转换成当地日期/时间的tm结构指针.
¨?size_t strftime(char* s, size_t smax, const char* fmt, const struct tm* tp):将参数tp 的日期/时间以格式化字符串fmt 输出到字符串s,s 最多
储存smax个字符.
C-6 工具函数
¨?int abs(int n)、long labs(long n):传回整数n 的绝对值.
¨?double atof(const char* s):将参数字符串s 转换成浮点数,如果字符串不能转换传回0.0.等价于strtod(s,(char **)NULL).
¨?int atoi(const char* s):将参数字符串s 转换成整数,如果字符串不能转换传回0.等价于(int)strtol(s,(char **)NULL,10).
¨?long atol(const char* s):将参数字符串s 转换成长整数,如果字符串不能转换传回0.等价于strtol(s, (char**)NULL,10).
¨?double strtod(const char* s, char** endp):函数忽略字符串s 前的空白字元,将s的前缀部分,数字转换成浮点数.除非endp为NULL,否则该函数将把指向s中未转换部分(s的后缀部分)的指针保存在*endp中.如果结果上溢,则函数返回带有符号的HUGE_VAL;如果结果下溢,则返回0.在这两种情况下,errno都设置成ERANGE.
¨?long strtol(const char* s, char** endp, int base):函数忽略字符串s 前的空白字元,将s的前缀部分,数字转换成畅整型.除非endp为NULL,否则该函数将把指向s中未转换部分(s的后缀部分)的指针保存在*endp中.如果base的值在2-36之间,则假定输入是以该数为基底的;如果base的取值为0,则基底为八进制、十进制或十六进制.(0为8,0x或0X为16进制)无论在哪种情况下.字母均表示10-base-1之间的数字.如果base值为16则可以加上前导0x或0X.
¨?unsigned long strtoul(const char* s, char** endp, int base):如同strtol函数,其传回值是无符号长整数.
¨?void* calloc(size_t nobj, size_t size):为nobj 个长度为size的对象最长的数组分配内存,并返回指向分配区域的指针;若无法满足要求,则返回NULL.该空间的初始长度为0字节(初值为0).
¨?void* malloc(size_t size):传回大小size 内存指针,没有指定初
值,错误传回NULL.
¨?void* realloc(void* p, size_t size):将指针p 的内存改为size 大小,
不会更改原内存的值,多配置部分初值为0,错误传回NULL.
¨?void free(void* p):释放参数p 指针的内存空间.
¨?void abort():强迫程序以不正常方式结束,如同呼叫raise(SIGABRT)
函数.
¨?void exit(int status):程序以正常方式结束,传回系统环境状态值, 0
表示正常结束.
¨ int atexit(void (*fun)(void)):登记函数fun,该函数将在函数正常终止时调用.如果登记失败,则返回非0值.
¨?int system(const char* s):将字符串s 的指令传给环境来执行,也就是
执行MS-DOS的指令.
¨?char* getenv(const char* name):传回参数name 的环境字符串,如果没
有传回NULL.
¨?void* bsearch(const void* key, const void* base, size_t n, size_t size, int (*cmp)(const void* keyval, const void* datum)):数组基础的二元搜寻
函数,数组是参数base,键值是参数key,n 是数组大小, size 是每个元素的大小,最后的参数是指向函数的指针,这是比较元素大小的函数. cmp函数中,如果第一个参数(查找关键字)小于第二个参数(表象),它必须返回一个负值;如果第一个参数等于第二个参数,它必须返回0;如果第一个参数大于第二个参数,它必须大于0.数组base中的项必须升序排列. bsearch找到返回指向匹配值得指针,没有找到传回NULL.
¨?void qsort(void* base, size_t n, size_t size, int (*cmp)(const void*, const void*)):数组基础的快速排序法(升序)函数,数组是参数base,n 是数组大小,size 是每个元素的大小,最后的参数是指向函数的指针,这是比较元素大小的函数.
¨?int rand(void):传回随机数的整数值,其值的范围是0 到RAND_MAX
常数,其值为0x7FFF.
¨?void srand(unsigned int seed):指定随机数的种子数,参数是无符号整
数,如果没有指定,预设的种子数为1.
¨ div_t div(int num,int denom):div函数计算num/denom的商和余数,并把结果分别保存在结构类型div_t的两个int类型的成员quot和rem中.
¨ ldiv_t ldiv(long num,long denom):同上,计算类型为long.
C-7诊断:
提供assert宏用于为程序增加诊断功能.
void assert(int expression):表达式为0则在stderr中打印一条消息.
C-8 可变参数表:
¨ va_start(va_list ap,lastarg):在访问任何未命名参数前,必须用va_start宏初始化ap一次.
¨ type va_arg(va_list ap,type):每次执行宏va_arg都将产生一个与下一个未命名的参数具有相同类型和数值的值,它同时修改ap,以使下一次执行va_arg时返回下一个参数.
¨ void va_end(va_list ap):在所有的参数处理完毕之后,且在退出函数f之前,必须调用宏va_end一次.
C-9 非局部跳转
头文件
¨ int setjmp(jmp_buf env):setjmp宏将状态信息保存在env中,供longjmp使用.如果直接调用setjmp则返回值为0;如果在longjmp中调用setjmp,则返回值为非0.setjmp只能用于某些上下文中,如用于if语句,switch语句,循环语句的条件测试中以及一些简单的关系表达式中如:
if (setjmp(env) == 0)
/* get here on direct call */
else
/* get here by calling longjmp */
¨ void longjmp(jmp_buf env, int val):longjmp通过最后一次调用setjmp时保存在env中的信息恢复状态,同时,程序重新恢复执行,其状态等同于setjmp宏调用刚刚执行完并返回非0值val.包含setjmp宏调用的函数的执行必须还没有终止.除下列清空下,可访问对象的值同调用longjmp时的值相同;在调用setjmp宏后,如果调用setjmp宏的函数中的非volatile自动变量改变了,则他们将变成未定义状态.
C-10 信号:
¨ void (*signal(int sig,void (*handler)(int)))(int):signal决定了如何处理后续的信号.如果handler的值为SIG_DFL,则采用由实现定义的默认行为;如果handler的值为SIG_IGN,则忽略该信号;否则,调用handler指向的函数(以信号作为参数).有效的信号包括:
SIGABRT 一场终止,例如由abort引起的终止
SIGFPE 算术运算出错,如除数为0或溢出
SIGILL 非法函数映像,如非法指定
SIGINT 用于交互式目的信号,如中断
SIGSEGV 非法存储器访问,如访问不存在的内存单元
SIGTERM 发送给程序的终止请求
对于特定的信号,signal将返回handler的前一个值;如果出现错误,则返回值SIG_ERR.当随后碰到信号sig时,该信号将恢复为默认行为,随后调用信号处理程序,就好象由(*handler)(sig)调用的一样.信号处理程序返回后,程序将从信号发生的位置重新开始执行.信号的初始状态由具体的实现定义.
¨ int raise(int sig):raise向程序发送信号sig.如果发送不成功,则返回一个非0值.