I文件
程序在执行完各种操作之后,需要将程序运行的结果保存以便随时取用,这就需要将程序运行结果保存入文件。
保存文件前需要知道
(一)文件的打开(创建)方式
头文件 #include<stdlib.h>
定义 文件指针 FILE *fp
fp=fopen(“文件名”,”读写方式”)
如果创建文件失败,返回一个空指针NULL
一般用这样的方式创建文件
FILE *fp
If((fp=fopen(“file.Txt”,“r”))= =NULL);
{
Printf(“cannot open file”);
exit(0);//强制程序关闭
}
文件使用方式 | 含义 | 如果指定的文件不存在 |
r(只读) | 为了输入数据,打开一个已存在的文本文件 | 出错 |
rb(只读) | 为了输入数据,打开一个二进制文本文件 | 出错 |
W(只写) | 为了输出数据,打开一个已存在的文本文件 |
建立新文件 |
Wb(只写)
|
为了输出数据,打开一个二进制文件
| 建立新文件
|
r+(读写) | 为了读和写,打开一个文本文件 | 出错 |
W+(读写) | 为了读和写,建立一个新的文本文件 | 建立新文件 |
a(追加 | 向文本文件尾添加数据 | 出错 |
a+(读写) | 为了读和写,打开一个文本文件 | 出错 |
Wb+(读写) | 为了读和写,建立一个新的二进制文件 | 建立新文件 |
ab+(读写) | 为读写打开一个二进制文件 | 出错 |
还有其他的读写方式,这是常用的读写方式
(二)将数据写入文件
1:用格式化的方式读写文件(这种方式不常用,知道就可以了)
fprintf(文件指针,格式字符串,输出表列)
fscanf(文件指针,格式字符串,输出表列)
2:以二进制方式向文件读写一组数据
fread(地址,大小,次数,fp)
fwrite(地址,大小,次数,fp)
还有其他的方式,只不过那些功能不是太强大,就没有列出来
(三)文件的关闭方式
在文件读写完毕之后,就可以使用它关闭文件,通常fopen和fclose成对出现
fp为定义的文件类型指针
fclose(fp);
G:动态内存分配和指向它的指针变量
以前就介绍过,全局变量是分配在内存中的动态储存区的,非静态的局部变量是分配在内存中的动态储存区的,这个储存区是一个称为“栈”的区域。C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据在需要时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由储存区的,称为“堆”区,可以根据需要,向系统申请所需空间大小,这些只能通过指针来引用。
内存的动态分配主要需要以下几个系统提供的库函数,分别是malloc,calloc,realloc,free函数。
需要的头文件是#include<malloc.h>或#include<stdlib.h>
(1):malloc(申请空间),calloc(申请的空间个数,每个空间的字节数)
使用模式:(类型名 *)malloc(字节数)
例 Int *q = (Int *)malloc(sizeof(int))//在此编译系统中申请一个int类型数据所需要的空间,想对一个数组申请空间可以用calloc函数,
若申请50个4字节空间,可以用calloc(50,4)
如果申请不成功,返回一个空指针NULL
如果申请的空间不够用或者太大了,可以用下面的函数改写申请的空间。
(2)Realloc(原来申请的动态空间名字,大小)
例:对于用malloc申请的空间,可以这样改写
Realloc(q,50)
此时它已被改写为50字节空间,而不是一个int数据所需的空间,如果申请不成功,realloc返回一个空指针NULL
(1) free(空间名)
对于申请的空间,若以后不再需要它,可以释放空间,就可以用它了
使用模式:free(q)
free函数无返回值
以上的内容对于用链表处理大批量数据是非常有用的,是经常要用到的,所以别看他简单,其实吧内涵丰富,还需要仔细体会,感悟。
对于指针这一章节来说,它太灵活了,正是因为它的灵活,它才为c语言注入了生机,要想用一句话两句话把它说清,我认为很难,我发现越是到难得地方我就不知道如何用语言表达我的想法了,所以我觉的最重要的是大家在实践中体会。