C语言指针和文件笔记

来源:互联网 发布:水产加工erp软件 编辑:程序博客网 时间:2024/05/01 09:09
指针数组 int *p[10];
数组指针 int (*p)[10];
函数指针 int *fun();
指针函数 int (*p)();


指针函数:
int add(int a,int b){}
int max(int a,int b){}
int fun(int (*p)(int ,int),int a,int b)
int (*p)(int ,int);
函数指针:
buf[10];
memset(buf,0,sizeof(buf));将buf中的内容全部设置为0
memcpy(buf2,buf1,sizeof(buf1));将buf1中的全部拷贝到buf2中
memmove(buf2,buf1,sizeof(buf1));将buf1中的全部移动到buf2中
memcpy使用的时候不能有重叠区域,而memmove可以在重叠区域移动。


FILE *fp=fopen("E:\\Program Test\\QT\\untitled12_1\\a.txt","w");
fputs(str,fp); //第一个参数是内存地址,第二个参数是文件指针。
fgets(str,sizeof(str),fp); //第一个参数是内存地址,第二个参数是内存块的大小,第三个参数是文件的指针。
feof(fp) //判断一个文件是否到达了结尾,到达结尾返回真。若是没有结尾就一直循环。
fclose(fp) //文件操作结束后一定要记得关闭文件指针。


r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失,若不存在就会创建文件。
w+ 打开可读写文件,若文件存在则文件长度清为0,即该文件内容会消失,若不存在就会创建文件。
a 用追加的方式打开文件,如果文件不存在,就创建文件,如果文件存在,就在原先文件的基础上追加写。


后面加"b"代表以二进制模式读写文件,不加就是文本模式。


二进制和文本模式的区别
1、在Windows系统中,文本模式下,以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"的时候,函数自动在"\n"前加"\r"。所以实际写入文件的是"\r\n"。
2、在类Unix/Linux系统中文本模式下,文件以"\n"代表换行,所以Linux系统中在文本模式和二进制模式下并无区别。


fgetc(fp);//从文件中一次性读取一个字符
while((c=fgetc(fp))!=EOF) //循环读取所有字符
fputc(c,fp);//从文件中一次性写入一个字符


fscanf(fp,"%s",buf);
fprintf(fp,"%s",buf);


fread(buf,sizeof(char),10,fp); //第一个参数是缓冲区,第二个参数是读取的时候最小单位,第三个参数是读取的字节数,第四个参数是读取文件的指针。函数有返回值size_t类型返回值,代表读取了多少记录数。
fwrite(buf,sizeof(char),2,fp); 


stat函数 
#include<sys/stat.h> //头文件
stat.st_size; //文件大小,单位:字节


struct stat st = { 0 };
stat("D:\\temp\\a.wmv",&st);
printf("%u\n",st.st_size); 文件大小


clock_t c1=clock();
……
clock_t c2=clock();
size_t c=c2-c1;
计算出程序所花的时间。


fseek 函数
fseek(fp, sizeof(int), SEEK_SET); //从文件开始位置向后偏移sizeof(int)字节
fseek(fp, 0 - sizeof(int), SEEK_CUR); //从文件当前位置往回偏移sizeof(int)字节
fseek(fp, 0 - sizeof(int), SEEK_END); //从文件结尾往前偏移iszeof(int)字节


ftell 函数
ftell(fp); //文件指针的位置


fflush 函数
fflush(fp); //将缓冲区的内容立刻写入文件,不用等到缓冲区满了。如果没有这个函数,读写文件的时候一般要到达调用fclose()函数才一次性写入硬盘。优势是,不会因为电脑死机导致文件丢失,但是会导致硬盘读写增加,降低寿命,程序效率变低。


remove("D:\\temp\\a.txt"); //删除文件
rename("D:\\temp\\c.txt","D:\\temp\\b.txt"); //文件重新命名


FILE *fp = fopen("a.txt","w"); //如果没有指定路径,那么生成的文件在当前目录。
0 0
原创粉丝点击