您的位置:首页 > 编程语言 > C语言/C++

C语言指针和文件笔记

2015-09-11 19:50 267 查看
指针数组 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"); //如果没有指定路径,那么生成的文件在当前目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: