C语言中常用的几个头文件及库函数 (stdio.h ,string.h ,math.h ,stdlib.h)

(参考:https://www.jb51.net/article/124594.htm

     #include<stdio.h> 或 #include"stdio.h"

     用#include<stdio.h>形式时,编译系统从存放C编译系统的子目录中去找所包含的文件stdio.h,这称为标准方式。

     用#include"stdio.h"形式时,编译系统先在用户的当前目录(用户存放源程序文件的子目录)中寻找stdio.h,若找不到,再按标准方式查找。如果该头文件不在当前目录,可加入路径如(#include "C:\temp\file1.h")。

 

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

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

(1)文件访问。

1

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

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

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

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

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

FILE *fp ;                    / 定义一个指向文件的指针变量fp
fp = fopen("a1","r");         / 将fopen函数的返回值(a1文件信息区的起始地址)赋给指针变量fp
表示要打开名字为“a1”的文件,使用文件方式为"r"读入。

2

int fcloseFILE *f):

fclose(文件指针); 释放缓冲区数据,关闭流。如:fclose(fp); 前面曾把打开文件(用fopen函数)时函数返回的指针赋给了fp,现在把fp指向的文件关闭,此后fp不再指向该文件。当成功执行操作,则返回值为0,否则返回EOF(-1)。

下面两个没太用过:

1

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

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

1

int fflushFILE *f):

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

(2)二进制输入/输出

1

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

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

1

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

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

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

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

1

int fgetc/getcFILE *f):

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

1

int fputc/putcint c, FILE *f)

将字符c输入到流f中。

1

int fgetschar * s,int n,FILE *f):

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

1

int fputsconst char * s,FILE *f):

将字符串s输出到流中。

1

int ungetint c, FILE *f)

将c写回到f中。

(4)格式化输入/输出

按一定格式转输出。

1

2

scanf/fscanf/sscanf

printf/fprintf/sprintf

注意:1,不加f/s,则是格式字符串标准输入/出函数,输入/出到终端/屏幕;

          printf(格式控制,输出形式);     例:printf( "%d , %c\n" , i , c);

                                                                   printf(const char *format,...)

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

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

          scanf(格式控制,地址表列);     例:scanf("a=%f,b=%f,c=%f" ,&a, &b ,&c);

          putchar (c);  输出一个字符

           getchar ( );  输入一个字符

(5)文件定位

1

long ftellFILE *f):

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

1

int fseekFILE *f,long offset,int origin):

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

1

void rewindFILE *f)

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

不常用:

1

int fgetposFILE *f,*p)

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

1

int fsetposFILE *f,const *p)

指针位置指向*p。

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

1

int feofFILE *f)

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

1

int ferrorFILE *f)

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

1

int removechar *filename)

删除指定位置的文件。

1

int renameconst char *oldname,const char *newname)

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

1

FILE *tmpfilevoid

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

 

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

(1)str

      puts(字符数据);       输出字符串函数

       例:char str[]="china";    puts(str);

       gets(字符数组);     输入字符串函数

        例:gets(str);

1

char * strcpy (char *dest, const char *src); //字符串复制函数,把字符串2和后面的'\0'复制到字符数组1中。

例:char str1[10],str2[]="china";    strcpy(str1,str2); 注:str1必须够大,以便能放下str2

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

1

char * strncpy (char *dest, const char *src,n); //字符串复制函数,将字符串2中前面的n个字符复制到字符数组1中,n必须少于str1的字符,不包括('\0')。

例:char str1[10],str2[]="china"; strncpy(str1, str2, 2)  输出结果为str1="ch"

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

char * strcat (char *dest, const char *src);   //字符串连接函数,把字符串2连接到字符串1的后面,结果放到字符数组1中。

 例:char str1[10]="good "; char str2[]="boy";  strcat(str1,str2); 注:str1必须够大,以便能放下str2。

 

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

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

int  strcmp (const char *s1, const char *s2);  //字符串比较函数,比较字符串1和字符串2,将2个字符串自左至右逐个字符比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。

例:char str1[]="china "; char str2[]="korea"; strcmp(str1,str2); k比c大,所以函数值为负。

  如果str1=str2,则函数值为0; 如果str1>str2,则函数值为正; 如果str1<str2,则函数值为负。 如: if(strcmp(str1,str2)=0)

 

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

      strlen(字符数组);    //测字符串长度的函数,字符串实际长度(不包括'\0')

       例:char str[10]="china";  printf("%d",strlenn(str)) ; 输出的结果不是10也不是6,而是5

       strlwr(字符串);      //转换为 小写 的函数,将字符串中的大写字母转换为小写字母

        strupr(字符串);  //转换为 大写 的函数,将字符串的小写字母转换为大写字母

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

(2)mem

1

void *memcpyvoid *s, const void *ct,n)

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

1

2

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

void *memsetvoid *s,int c, n)

void *memset(void *s, int c, size_t n);

函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 c 替换并返回 s 。

memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法 [1]。

memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度

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

1

int memcmp(cs,ct,n)

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

1

void *memchr(cs,c,n)

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

 

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

求绝对值

1

2

3

int abs  (int x);

long labs (long x);

float fabs float x):

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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>数值转换、内存分配等问题。

1

int randvoid

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

 

void *malloc(unsigned int size);

    作用是在内存的动态存储区中分配一个长度为size(不允许为负数)的连续空间。此函数的值(即“返回值”)是分配区域的第一个字节的地址,或者说,此函数是一个指针型函数,不指向任何类型的数据,只提供一个地址,返回的指针指向该分配域的开头位置,如内存空间不足则返回空指针NULL。如: 

        malloc(100);   //开辟100字节的心事分配域,函数值为其第一个字节的地址

void *calloc(unsiggned n,unsigned size);

    作用是在内存的动态存储区分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组,可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size,这是动态数组。函数返回指向所分配域的起始位置的指针,如果分配不成功则返回NULL。如:

       p=calloc(50,4); //开辟50x4个字节的临时分匹配域,把起始地址赋给指针变量p

void free(void *p);

    作用是释放指针变量p所指向的动态空间(p为malloc,realloc,calloc最近一次所开辟的内存),使这部分空间能重新被其他变量使用。如;

        free(p);  //释放指针变量p所指向的已分配的动态空间   free函数无返回值

void *realloc(void *p,uunsigned int size);

    如果已经通过malloc或calloc函数获得了动态空间,想改变其大小,可以用realloc函数重新分配,用realloc函数将p所指向的动态空间的大小改为size,如果重分配不成功,则返回NULL。如:

        realloc(p,50);  //将p所指向的已分配的动态空间改为50字节

 

1

void abortvoid

使程序非正常终止。

1

void exitint status)

使程序正常终止。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章