(参考:https://www.jb51.net/article/124594.htm)
#include
用#include
用#include"stdio.h"形式时,编译系统先在用户的当前目录(用户存放源程序文件的子目录)中寻找stdio.h,若找不到,再按标准方式查找。如果该头文件不在当前目录,可加入路径如(#include "C:\temp\file1.h")。
不完全统计,C语言标准库中的头文件有15个之多,所以我主要介绍常用的这四个头文件stdio.h ,string.h ,math.h ,stdlib.h ,以后用到其他的再做补充。下面上干货:
(1)文件访问。
1 |
|
以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 |
|
fclose(文件指针); 释放缓冲区数据,关闭流。如:fclose(fp); 前面曾把打开文件(用fopen函数)时函数返回的指针赋给了fp,现在把fp指向的文件关闭,此后fp不再指向该文件。当成功执行操作,则返回值为0,否则返回EOF(-1)。
下面两个没太用过:
1 |
|
以mode模式打开地址为'filename'的文件,并将该文件与流f2关联。
1 |
|
将已写到缓冲区但未写入文件中的所有数据写入文件中。
(2)二进制输入/输出
1 |
|
从f中读取n个长度为size的对象,并放入ptr指向的数组中。
1 |
|
从ptr指向数组中读取n个长度为size的对象,并写入f中。
注意:要注意write与read的对象,读和写都是针对文件流f的。
(3)非格式化输入/输出
1 |
|
返回流f 的下一个字符,到达文件末尾/发生错误,则返回EOF。
1 |
|
将字符c输入到流f中。
1 |
|
将f中下n-1个字符读入到数组s中。遇到换行符,则终止。
1 |
|
将字符串s输出到流中。
1 |
|
将c写回到f中。
(4)格式化输入/输出
按一定格式转输出。
1 2 |
|
注意: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 |
|
返回当前指针位置。错误时返回-1L。
1 |
|
将当前流f指针位置设置到:origin后offset个字符处。origin有:SEEK_SET:文件起始位置;SEEK_CUR指针当前位置,SEEK_END:文件结束位置。
1 |
|
指针返回文件开始位置,相当于:fseek(f,0L,SEEK_SET)
不常用:
1 |
|
将指针当前位置记录到*p中,以供fsetpos函数使用。
1 |
|
指针位置指向*p。
(6)错误处理与文件操作
1 |
|
指示文件结束,一直返回0,结束时返回非0值。
1 |
|
如果设置了与f相关的错误指示符,则返回一个非0值。
1 |
|
删除指定位置的文件。
1 |
|
改文件名,否则返回非0值。
1 |
|
建立临时文件,‘wb+'模式,在被关闭或程序正常结束时自动删除
(1)str
puts(字符数据); 输出字符串函数
例:char str[]="china"; puts(str);
gets(字符数组); 输入字符串函数
例:gets(str);
1 |
|
将字符串src复制到字符串dest中(包括'\0'),返回dest
1 |
|
将src中的前n个字符复制到dest中,返回dest,不够n个则补‘\0'
|
src连接到dest后;src 中前n个字符连接到dest后。
例: 如果str1=str2,则函数值为0; 如果str1>str2,则函数值为正; 如果str1 |
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 |
|
将字符串ct中的前n个字符拷贝到s中,并返回s。
1 2 |
|
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 |
|
将cs前n个字符与ct进行比较,cs 1 返回指向c在cs中第一次出现的位置指针。 求绝对值 1 2 3 所有返回值均为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 1 产生一个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 使程序非正常终止。 1 使程序正常终止。
void
*
memchr
(cs,c,n)
3.
int
abs
(
int
x);
long
labs
(
long
x);
float
fabs
(
float
x):
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.
int
rand
(
void
)
void
abort (
void
)
void
exit(
int
status)