C语⾔中常⽤的⼏个头⽂件及库函数
(stdio.h ,string.h,math.h,std。。。
#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)⽂件访问。
1FILE*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"读⼊。
2int fclose(FILE*f):
fclose(⽂件指针); 释放缓冲区数据,关闭流。如:fclose(fp); 前⾯曾把打开⽂件(⽤fopen函数)时函数返回的指针赋给了fp,现在把fp指向的⽂件关闭,此后fp不再指向该⽂件。当成功执⾏操作,则返回值为0,否则返回EOF(-1)。
下⾯两个没太⽤过:
1FILE*freopen(“filename”,“mode”,FILE* f):
以mode模式打开地址为'filename'的⽂件,并将该⽂件与流f2关联。
1int fflush(FILE*f):
将已写到缓冲区但未写⼊⽂件中的所有数据写⼊⽂件中。
(2)⼆进制输⼊/输出
1fread(*ptr,size,n,FILE* f):
从f中读取n个长度为size的对象,并放⼊ptr指向的数组中。
1fwrite(*ptr,size,n,FILE* f):
从ptr指向数组中读取n个长度为size的对象,并写⼊f中。
注意:要注意write与read的对象,读和写都是针对⽂件流f的。(3)⾮格式化输⼊/输出
1int fgetc/getc(FILE*f):
返回流f 的下⼀个字符,到达⽂件末尾/发⽣错误,则返回EOF。1int fputc/putc(int c, FILE*f)
将字符c输⼊到流f中。
1int fgets(char* s,int n,FILE*f):
将f中下n-1个字符读⼊到数组s中。遇到换⾏符,则终⽌。
1int fputs(const char* s,FILE*f):
将字符串s输出到流中。
1int unget(int c, FILE*f)
将c写回到f中。
(4)格式化输⼊/输出
按⼀定格式转输出。
1 2scanf/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)⽂件定位
1long ftell(FILE*f):
返回当前指针位置。错误时返回-1L。
1int fseek(FILE*f,long offset,int origin):
将当前流f指针位置设置到:origin后offset个字符处。origin有:SEEK_SET:⽂件起始位置;SEEK_CUR指针当前位置,SEEK_END:⽂件结束位置。
1void rewind(FILE*f)
指针返回⽂件开始位置,相当于:fseek(f,0L,SEEK_SET)
不常⽤:
1int fgetpos(FILE*f,*p)
将指针当前位置记录到*p中,以供fsetpos函数使⽤。
1int fsetpos(FILE*f,const*p)
指针位置指向*p。
(6)错误处理与⽂件操作
1int feof(FILE*f)
指⽰⽂件结束,⼀直返回0,结束时返回⾮0值。
1int ferror(FILE*f)
如果设置了与f相关的错误指⽰符,则返回⼀个⾮0值。
1int remove(char*filename)
删除指定位置的⽂件。
1int rename(const char*oldname,const char*newname)
改⽂件名,否则返回⾮0值。
1FILE*tmpfile(void)
建⽴临时⽂件,‘wb+'模式,在被关闭或程序正常结束时⾃动删除
2. <string.h> 分成两组,⼀组str开头,⼀组mem开头(该组函数在<memory.h>中也有定义,不是所有编译器都有)
(1)str
puts(字符数据);      输出字符串函数
例:char str[]="china";    puts(str);
gets(字符数组);    输⼊字符串函数
例:gets(str);
1char* strcpy(char*dest, const char*src); //字符串复制函数,把字符串2和后⾯的'\0'复制到字符数组1中。例:char str1[10],str2[]="china";    strcpy(str1,str2); 注:str1必须够⼤,以便能放下str2
将字符串src复制到字符串dest中(包括'\0'),返回dest
1char* 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
1void*memcpy(void*s, const void*ct,n)
将字符串ct中的前n个字符拷贝到s中,并返回s。
1 2void*memmove(s,ct,n)同上⼀函数,只是在对象重叠时仍能正确执⾏。void*memset(void*s,
int c, n)
void *memset(void *s, int c,  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。
1int memcmp(cs,ct,n)
将cs前n个字符与ct进⾏⽐较,cs<ct,返回负数;否则返回0 1void*memchr(cs,c,n)
返回指向c在cs中第⼀次出现的位置指针。
3.<math.h>⼀些数学函数
求绝对值
1 2 3int 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 22double 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中

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。