实际上库函数并不是C语言的一部分,它是由人们根据需要编制并提供用户使用的。每一种C编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。ANSI C标准提出了一批建议提供的标准库函数,它包括了目前多数C编译系统所提供的库函数,但也有一些是某些C编译系统未曾实现的。考虑到通用性,本篇博文主要列出ANSI C标准建议提供的、常用的部分库函数。对多数C编译系统,可以使用这些函数的绝大部分。由于C库函数的种类和数目很多(例如,还有屏幕和图形函数、时间日期函数、与系统有关的函数等,每一类函数又包括各种功能的函数),限于篇幅,就不全部介绍了,只列出最基本的库函数。一般情况下够用啦~~
1、数学函数
调用数学函数时,要求在源文件中包含头文件,即使用以下命令行:
#include <math.h>或include “math.h”
函数名 | 函数原型说明 | 功能 | 返回值 | 说明 |
abs | Int abs (int x); | 求整数x的绝对值。 | 计算结果 |
|
acos | double acos (double x); | 计算cos-1(x)的值。 | 计算结果 | x在-1 ~ 1范围内 |
asin | double asin (double x); | 计算sin-1(x)的值。 | 计算结果 | x在-1 ~ 1范围内 |
atan | double atan (double x); | 计算tan-1(x)的值。 | 计算结果 |
|
atan2 | double atan2 (double x); | 计算tan-1(x/y)的值。 | 计算结果 |
|
cos | double cos (double x); | 计算cos (x)的值。 | 计算结果 | x的单位为弧度 |
cosh | double cosh (double x); | 计算双曲余弦cosh(x)的值。 | 计算结果 |
|
exp | double exp (double x); | 计算ex的值。 | 计算结果 |
|
fabs | double fabs(double x); | 求x的绝对值。 | 计算结果 |
|
floor | double floor (double x); | 求不大于x最大整数。 | 该整数的双精度数。 |
|
fmod | Double fmod (double x,double y); | 求整除x/y的余数。 | 余数的双精度数。 |
|
frexp | Double frexp (double val,int*eptr); | 把双精度数val分解尾数x和以2为底的指数n,即val=x*2n,n存放在eptr所指向的变量中。 | 返回尾数x 0.5≤x<1 |
|
log | double log (double x); | 求logex,即ln x。 | 计算结果 |
|
log10 | double log10 (double x); | 求log10x。 | 计算结果 |
|
modf | double modf (double val,double *iptr); | 把双精度数val分解成整数部分和小数部分,整数部分存放在iptr所指的单元。 | Val的小数部分 |
|
pow | Double pow (double x,double y); | 计算xy的值。 | 计算结果 |
|
rand | Int rand(void) | 产生-90~32767间的随机整数 | 随机整数 |
|
sin | double sin (double x); | 计算sin (x)的值。 | 计算结果 | x的单位为弧度 |
sinh | double sinh (double x); | 计算x的双曲正弦函数sinh(x)的值。 | 计算结果 |
|
sqrt | double sqrt (double x); | 计算x的平方根。 | 计算结果 | x≥0 |
tan | double tan (double x); | 计算tan (x)的值。 | 计算结果 | x的单位为弧度 |
tanh | double tanh | 计算x的双曲正切函数tanh(x)的值 | 计算结果 |
|
2、字符函数和字符串函数
ANSI C标准要求在使用字符串函数时要包含头文件string.h,在使用字符函数时要包含头文件"ctype.h"。有的C编译不遵循ANSI C标准的规定而用其他名称的头文件。具体查有相关资料。
函数名 | 函数原型说明 | 功能 | 返回值 | 包含文件 |
isalnum | int isalnum(int ch); | 检查ch是否为字母或数字 | 是,返回1;否则返回0 | ctype.h |
isalpha | int isalpha(int ch); | 检查ch是否为字母 | 是,返回1;否则返回0 | ctype.h |
iscntrl | int iscntrl(int ch); | 检查ch是否为控制字符 | 是,返回1;否则返回0 | ctype.h |
isdigit | int isdigit(int ch); | 检查ch是否为数字 | 是,返回1;否则返回0 | ctype.h |
isgraph | int isgraph(int ch); | 检查ch是否为(ASCII码值在ox21到ox7e)的可打印字符(即不包含空格字符) | 是,返回1;否则返回0 | ctype.h |
islower | int islower(int ch); | 检查ch是否为小写字母 | 是,返回1;否则返回0 | ctype.h |
isprint | int isprint(int ch); | 检查ch是否为字母或数字 | 是,返回1;否则返回0 | ctype.h |
ispunct | int ispunct(int ch); | 检查ch是否为标点字符(包括空格),即除字母、数字和空格以外的所有可打印字符。 | 是,返回1;否则返回0 | ctype.h |
isspace | int isspace(int ch); | 检查ch是否为空格、制表或换行字符 | 是,返回1;否则返回0 | ctype.h |
isupper | int isupper(int ch); | 检查ch是否为大写字母 | 是,返回1;否则返回0 | ctype.h |
isxdigit | int isxdigit(int ch); | 检查ch是否为16进制数字 | 是,返回1;否则返回0 | ctype.h |
strcat | char *strcat(char *s1,char *s2); | 把字符串s2接到s1后面 | s1所指地址 | string.h |
strchr | char *strchr(char *s,int ch); | 在s把指字符串中,找出第一次出现字符ch的位置 | 返回找到的字符的地址,找不到返回NULL | string.h |
strcmp | char *strcmp(char *s1,char *s2); | 对s1和s2所指字符串进行比较 | s1<s2,返回负数,s1=s2,返回0,s1>s2,返回正数。 | string.h |
strcpy | char *strcpy(char *s1,char *s2); | 把s2指向的串复制到s1指向的空间 | s1所指地址 | string.h |
strlen | unsigned strlen(char *s); | 求字符串s的长度 | 返回串中字符(不计最后的‘\0’)个数 | string.h |
strstr | char *strstr(char *s1,char *s2); | 在s1所指字符串中,找到字符串s2第一次出现的位置 | 返回找到的字符串的地址,找不到返回NULL | string.h |
tolower | int tolower(int ch); | 把ch中的字母转换成小写字母 | 返回对应的小写字母 | ctype.h |
toupper | int toupper(int ch); | 把ch中的字母转换成大写字母 | 返回对应的大写字母 |
3、输入输出函数
凡用以下的输入输出函数,应该使用#include<stdio.h>把stdio.h头文件包含到源程序文件中。
函数名 | 函数原型说明 | 功能 | 返回值 | 说明 |
clearerr | void clearer(FILE * fp); | 清除与文件指针fp有关的所有出错信息。 | 无。 |
|
close | int close(int fp); | 关闭文件。 | 关闭成功返回0,不成功返回-1。 | 非ANSI标准函数。 |
creat | int creat (char * filename,int mode); | 以mode所指定的方式建立文件。 | 成功则返回正数,否则返回-1。 | 非ANSI标准函数。 |
eof | Inteof (int fd); | 检查文件是否结束。 | 遇文件结束,返回1;否则返回0。 | 非ANSI标准函数。 |
fclose | int fclose(FILE * fp); | 关闭fp所指的文件,释放文件缓冲区 | 出错返回非0,否则返回0。 |
|
feof | int feof(FILE * fp); | 检查文件是否结束 | 遇文件结束返回非0,否则返回0。 |
|
fgetc | int fgetc(FILE * fp); | 从fp所指的文件中取得下一个字符 | 出错返回EOF,否则返回所读字符。 |
|
fgets | char * fgets(char * buf, int n, file * fp); | 从fp所指的文件中读取一个长度为n - 1的字符串,将其存入buf所指存储区 | 返回buf所指地址,若遇文件结束或出错返回NULL。 |
|
fopen | FILE * fopen(char * filename, char * mode); | 以mode指定的方式打开名为filename的文件 | 成功,返回文件指针(文件信息区的起始地址),否则返回NULL。 |
|
fprintf | int fprintf(FILE * fp,char * format,args,…); | 把arg,…的值以format指定的格式输出到fp所指定的文件中 | 实际输出的字符数。 |
|
fputc | int fputc(char ch,FILE * fp); | 把ch中字符输出到fp所指文件 | 成功返回该字符,否则返回EOF。 |
|
fputs | int fputs(char * str,FILE * fp); | 把str所指字符串输出到fp所指文件 | 成功返回非0,否则返回0。 |
|
fread | int fread(char * pt,unsigned size,unsigned n,FILE * fp); | 从fg所指文件中读取长度为size的n个数据项存到pt所指文件中 | 读取的数据项个数。 |
|
fscanf | int fscanf(FILE * fp,char * format,args,…); | 从fg所指定的文件中按format指定的格式把输入数据存入到args,…所指的内存中 | 已输入的数据个数,遇文件的结束或出错返回0。 |
|
fseek | int fseek(FILE * fp,long offer,int base); | 移动fp所指文件的位置指针 | 成功返回当前位置,否则返回-1。 |
|
ftell | int ftell(FILE * fp); | 求出fp所指文件当前的读写位置 | 读写位置。 |
|
fwrite | int fwrite(char * pt,unsigned size,unsigned n,FILE * fp); | 把pt所指向的n * size个字节输出到fp所指文件中 | 输出的数据项个数。 |
|
getc | int getc(FILE * fp); | 从fp所指文件中读取一个字符 | 返回所读字符,若出错或文件结束返回EOF。 |
|
getchar | int getchar(void); | 从标准输入设备读取下一个字符。 | 返回所读字符,若出错或文件结束返回-1。 |
|
getw | int getw (FILE * fp); | 从fp所指向的文件读取下一个字(整数)。
| 非ANSI标准函数。 | |
open | Int open (char * filename,int mode); | 以mode指出的方式打开已存在的名为filename的文件。 | 返回文件号(正数)。如打开失败,返回-1。 | 非ANSI标准函数。 |
printf | int printf (char * format,args,…); | 按format指向的格式字符串所规定的格式,将输出表列args的值输出到标准输出设备。 | 输出字符个数。若出错,返回负值。 | format可以是一个字符串,或字符数组的起始地址。 |
putc | int putc(int ch,FILE * fp); | 同fputc | 同fputc |
|
putcahr | int putcahr(char ch); | 把ch输出到标准输出设备 | 返回输出的字符,若出错,返回EOF。 |
|
puts | int puts(char * str); | 把str所指字符串输出到标准设备,将‘\0’转换成回车换行符 | 返回换行符,若出错,返回EOF。 |
|
putw | int putw (int w,FILE * fp); | 将一个整数w(即一个字)写到fp指向的文件中。 | 返回输出的整数;若出错,返回EOF。 | 非ANSI标准函数。 |
read | int read (int fp,char * buf,unsigned count); | 从文件号fp所指示的文件中读count个字节到由buf指示的缓冲区中。 | 返回真正读入的字节个数。如遇文件结束返回0,出错返回-1。 | 非ANSI标准函数。 |
rename | int rename(char * oldname,char * newname); | 把oldname所指文件名改为newname所指文件名。 | 成功返回0,出错返回-1。 |
|
rewind | void rewind(FILE * fg); | 将fp指示的文件位置指针置于文件开头,并清除文件结束标志和错误标志。 | 无。 |
|
scanf | int scanf (char * format,args,…); | 从标准输入设备按format指定的格式把输入数据存入到args,…所指的内存中。 | 读入并赋给args的数据个数。遇文件结束返回EOF,出错返回0。 | args为指针。 |
write | int write (int fd, char * buf,unsigned count); | 从buf指示的缓冲区输出count个字符到fd所标志的文件中。 | 返回实际输出的字节数。如出错返回-1。 | 非ANSI标准函数。 |
4、动态分配函数和随机函数
ANSI标准建议设4个有关的动态存储分配的函数,即calloc()、malloc()、free()、realloc()。实际上,许多C编译系统实现时,往往增加了一些其他函数。ANSI标准建议在"stdlib.h"头文件中包含有关的信息,但许多C编译系统要求用"malloc.h"而不是"stdlib.h"。
ANSI标准要求动态分配系统返回void指针。void指针具有一般性,它们可以指向任何类型的数据,但目前有的C编译所提供的这类函数返回char指针。无论以上两种情况的哪一种,都需要用强制类型转换的方法把void或char指针转换成所需的类型。
函数名 | 函数原型说明 | 功能 | 返回值 |
calloc | void * calloc(unsigned n,unsigned size); | 分配n个数据项的内存空间,每个数据项的大小为size个字节。 | 分配内存单元的起始地址;如不成功,返回0。 |
free | void free(void p); | 释放p所指的内存区。 | 无 |
malloc | void * malloc(unsigned size); | 分配size个字节的存储空间。 | 分配内存空间的地址;如不成功返回0。 |
realloc | void * realloc(void * p,unsigned size); | 把p所指内存区的大小改为size个字节。 | 新分配内存空间的地址;如不成功返回0。 |
rand | int rand(void); | 产生0到32767随机数。 | 返回一个随机整数。 |