首页 > 代码库 > 2017/03/08学习笔记
2017/03/08学习笔记
结构体深copy和浅copy问题
编译器的=号操作,只会把结构体中指针变量的值copy,但不会重新开辟内存空间.
//出现浅copy出现的场景是,结构体里面有指针成员的时候.
如果需要执行深copy,需要手动显示分配内存,然后手动copy指针成员所执行的数据.
结构体偏移量定义下来,则结构体中的成员 内存布局就定义下来了,可以通过成员地址去求结构体的内存地址
文件操作
文件的分类
按文件的逻辑结构分为
记录文件:由具有一定结构的记录组成(定长和不定长)
流式文件:由一个个字符(字节)数据顺序组成.
按存储介质:
普通文件:存储介质文件(磁盘、磁带等)
设备文件:非存储介质(键盘、显示器、打印机等)
按数据组织形式:
文本文件:ASCII文件,每个字节存放一个字符 ASCII码。
二进制文件:数据按其在内存中的存储形式原样存放.
每个文件都以文件名为标示,I/O设备的文件名是系统定义的,如:
COM1和AUX 第一串行口,附加设备;
COM2--第二串行口,此外还有COM3\COM4等.
CON--控制台,键盘,显示器
LPT1或PRN第一并行口或打印机
LPT2 第二并行口,还可能有LPT3等。
NULL 空设备
磁盘文件可以由用户自己命名,等上述被系统保留的设备名字不能用作文件名,如不能把一个文件命名为CON或CON.txt
* 流概念*
流是一个动态的概念,可以将一个字节形象的比喻成一滴水,字节在设备、文件和程序之间的传输就是流,类似于水在管道中的传输,可以看出流是对输入输出源的一种抽象,也是对传输信息的一种抽象,通过读输入输出源的抽象,屏蔽了设备之间的差异,使程序员能以一种通用的方式进行存储操作,通过对传输信息的抽象,使得所有信息都可以转换为字节流的形式传输,信息解读的过程与传输过程分离。
C语言中I/O操作可以简单的看作是从程序移入或移出字节,这种搬运的过程便称为流,程序只需要关心是否正确地输出了字节数据,以及是否正确的输入了要读取的字节数据,特定I/O设备的细节对程序员是隐藏的。
文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区。
非缓冲文件系统:低级文件系统,有用户在程序中为每个文件设定缓冲区。
* 文件API*
文件读写 fgetc fputc 按照字符读写文件
fputs fgets按照行读写文件(读写配置文件)
fread fwrite按照块读写文件(大数据块迁移)
按照格式化读写文件
文件控制 文件是否结束
文件指针的定位 跳转
文件打开fopen();
文件的打开操作表示将给用户指定的文件在内存中分配一个FILE结构区。并将该结构的指针返回个用户程序,以后用户程序就可用次FILE指针来实现对指定文件的读写操作了。
当使用打开函数时,必须给出文件名、文件操作方式(读、写),如果该文件不存在,就意味着建立,并将文件指针指向文件开头。若已有一个同名文件存在,则删除该文件。
char * filename1= "D:\test.txt";//只在windows下有效
char *filenam2 = "D:/test.txt";//统一使用这种方式,兼容linux 、windows
2017/03/08学习笔记