C语言中常用的几个头文件及库函数

所属分类: 软件编程 / C 语言 阅读数: 103
收藏 0 赞 0 分享

不完全统计,C语言标准库中的头文件有15个之多,所以我主要介绍常用的这四个头文件stdio.h,string.h,math.h,stdlib.h,以后用到其他的再做补充。下面上干货:

1.<stdio.h>:定义了输入输出函数、类型以及宏,函数几乎占了标准库的1/3。

(1)文件访问。

FILE *fopen(“filename”,“mode”):

以mode模式打开地址为'filename'的文件,并返回文件指针。

访问模式主要是“r”:只读;   “w” :只写,并删除已有内容;  “a”:追加,在末尾追加;

 “r+”, “w+”:读写; “a+”追加,上述结尾加“b”:二进制文件操作。

注意:其中r是打开文件,而w会创建(如果文件不存在);  w会覆盖原有内容,a则是在原有文件末尾追加。

int fclose(FILE *f):

释放缓冲区数据,关闭流。

下面两个没太用过:

FILE *freopen(“filename”,“mode”,FILE * f):

以mode模式打开地址为'filename'的文件,并将该文件与流f2关联。

int fflush(FILE *f):

将已写到缓冲区但未写入文件中的所有数据写入文件中。

(2)二进制输入/输出

fread(*ptr,size,n,FILE* f):

从f中读取n个长度为size的对象,并放入ptr指向的数组中。

fwrite(*ptr,size,n,FILE* f):

从ptr指向数组中读取n个长度为size的对象,并写入f中。

注意:要注意write与read的对象,读和写都是针对文件流f的。

(3)非格式化输入/输出

int fgetc/getc(FILE *f):

返回流f的下一个字符,到达文件末尾/发生错误,则返回EOF。

int fputc/putc(int c, FILE *f)

将字符c输入到流f中。

int fgets(char * s,int n,FILE *f):

将f中下n-1个字符读入到数组s中。遇到换行符,则终止。

int fputs(const char * s,FILE *f):

将字符串s输出到流中。

int unget(int c, FILE *f)

将c写回到f中。

(4)格式化输入/输出

按一定格式转输出。

scanf/fscanf/sscanf
printf/fprintf/sprintf

注意:不加f/s,则是格式字符串标准输入/出函数,输入/出到终端/屏幕;printf(const char *format,...)

加s,输入/出到字符串中。sprintf(char *s,const char *format,...)

加f,输入/出到文件流中。  fprintf(FILE *f,const char *format,...)

(5)文件定位

long ftell(FILE *f):

返回当前指针位置。错误时返回-1L。

int fseek(FILE *f,long offset,int origin):

将当前流f指针位置设置到:origin后offset个字符处。origin有:SEEK_SET:文件起始位置;SEEK_CUR指针当前位置,SEEK_END:文件结束位置。

void rewind(FILE *f)

指针返回文件开始位置,相当于:fseek(f,0L,SEEK_SET)

不常用:

int fgetpos(FILE *f,*p)

将指针当前位置记录到*p中,以供fsetpos函数使用。

int fsetpos(FILE *f,const *p)

指针位置指向*p。

(6)错误处理与文件操作

int feof(FILE *f)

指示文件结束,一直返回0,结束时返回非0值。

int ferror(FILE *f)

如果设置了与f相关的错误指示符,则返回一个非0值。

int remove(char *filename)

删除指定位置的文件。

int rename(const char *oldname,const char *newname)

改文件名,否则返回非0值。

FILE *tmpfile(void)

建立临时文件,‘wb+'模式,在被关闭或程序正常结束时自动删除

2.<string.h> 分成两组,一组str开头,一组mem开头(该组函数在<memory.h>中也有定义,不是所有编译器都有)

(1)str

char * strcpy (char *dest, const char *src);

将字符串src复制到字符串dest中(包括'\0'),返回dest

char * strncpy (char *dest, const char *src,n);

将src中的前n个字符复制到dest中,返回dest,不够n个则补‘\0'

char * strcat (char *dest, const char *src);
char * strncat (char *dest, const char *src,n);

src连接到dest后;src 中前n个字符连接到dest后。

int  strcmp (const char *s1, const char *s2);
int  strncmp (const char *s1, const char *s2,n); 比较s1与s2,s1<s2则返回负数,否则返回0;比较前n个字符
char * strchr (const char *s, int c);
char * strrchr (const char *s, int c); 返回字符串s中第一次出现字符c的位置指针;返回字符串s中最后一次出现字符c的位置指针(c会转换成char)

不常见 size_t   strcspn (const char *s1, const char *s2); char * strdup (const char *s); char * strerror(int errnum);

(2)mem

void *memcpy(void *s, const void *ct,n)

将字符串ct中的前n个字符拷贝到s中,并返回s。

void *memmove(s,ct,n)同上一函数,只是在对象重叠时仍能正确执行。
void *memset(void *s,int c, n)

将s中的前n个字符替换成c,并返回s。

int memcmp(cs,ct,n)

将cs前n个字符与ct进行比较,cs<ct,返回负数;否则返回0

void *memchr(cs,c,n)

返回指向c在cs中第一次出现的位置指针。

3.<math.h>一些数学函数

求绝对值

int abs  (int x);
long labs (long x);
float fabs (float x):

所有返回值均为double,三角函数角度用弧度表示,x,y均为double

double acos (x);
double asin (x);
double atan (x);
double atan2 (y, x):  arctan(y/x)
double tan  (x);
double tanh (x):    双曲正切
double sin  (x);
double sinh (x);
double cos  (x);
double cosh (x);
double pow  (x, y);//注意返回值类型为双精度型
double sqrt (x);
double ceil (x):   不小于x的最小整型数(向上取整)
double floor (x):  不大于x的最大整型数(向下取整)
double exp  (x);
double fabs (x);
double log  (x):     ln(x)
double log10 (x);
double fmod (x, y):    x/y的余数
double ldexp (x, n):         x*2^n
double modf (x, double *ip):   将x分成整数与小数两部分,返回小数部分,整数部分放在*ip中
double frexp (x, int *exp);    将x分成(0.5,1)之间的一个真分数和一个2的幂数,返回真分数,幂数放在exp中

4.<stdlib.h>数值转换、内存分配等问题。

int rand(void)

产生一个0~32767之间的随机整数。

指针名=(数据类型  *)calloc(n,size)

分配n个长度为size的连续空间,并且将所有元素置零,返回首地址。

指针名=(数据类型  *)malloc(n*size)

分配n*size个字节的内存,并返回首地址。

指针名p1=(数据类型  *)realloc(要改变内存大小的指针名p2,新的大小n)

分配长度为n字节的空间,将p2值赋值到该内存中,返回首地址到p1.(改变p1指向地址的内存大小)

void free(*p)

释放p指向的内存(p为malloc,realloc,calloc所开辟的内存)

void abort (void)

使程序非正常终止。

void exit(int status)

使程序正常终止。

以上所述是小编给大家介绍的C语言中常用的几个头文件及库函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

用标准c++实现string与各种类型之间的转换

这个类在头文件中定义, < sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本
收藏 0 赞 0 分享

C++如何通过ostringstream实现任意类型转string

再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
收藏 0 赞 0 分享

C/C++指针小结

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
收藏 0 赞 0 分享

C++ 类的静态成员深入解析

在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
收藏 0 赞 0 分享

C++类的静态成员初始化详细讲解

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
收藏 0 赞 0 分享

C++类静态成员与类静态成员函数详解

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值
收藏 0 赞 0 分享

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
收藏 0 赞 0 分享

static全局变量与普通的全局变量的区别详细解析

以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

C++ explicit关键字的应用方法详细讲解

C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
收藏 0 赞 0 分享

教你5分钟轻松搞定内存字节对齐

随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
收藏 0 赞 0 分享
查看更多