目录
联合体和共用体
枚举
系统文件
文件指针和普通指针区别
文件分类
文件操作的一般步骤
文件访问路径
打开,关闭文件函数
联合体和共用体
union test { char ch; short sh; int var; };
联合体
1)内部所有成员变量地址一致。等同于整个联合体的地址。 2)联合体的大小,是内部成员变量中,最大的那个成员变量的大小。(对齐) 3)修改其中任意一个成员变量的值,其他成员变量会随之修改。
最后得到的地址是一样的。
枚举
枚举:将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
enum color { 枚举常量 };
enum color { red, green, blue, black, pink, yellow };
枚举常量: 是整型常量。不能是浮点数。可以是负值。 默认初值从 0 开始,后续常量较前一个常 量 1.
可以给任意一个常量赋任意初值。后续常量较前一个常量 1
系统文件
C语言中有三个特殊的文件指针由系统默认打开,用户无需定义即可直接使用:
1.stdin: 标准输入,默认为当前终端(键盘),我们使用的scanf、getchar函数默认从此终端获得数据。 2.stdout:标准输出,默认为当前终端(屏幕),我们使用的printf、puts函数默认输出信息到此终端。 3.stderr:标准出错,默认为当前终端(屏幕),我们使用的perror函数默认输出信息到此终端。
标准输入 -- stdin -- 0 标准输出 -- stdout -- 1 标准错误 -- stderr -- 2
应用程序启动时,自动被打开,程序执行结束时,自动被关闭。 ---- 隐式回收。
1s = 1000ms 1ms = 1000us 1us == 1000ns
文件指针和普通指针区别
数据类型:FILE
FILE *fp = NULL;
借助文件操作函数来改变 fp 为空、野指针的状况。 fopen(); --> 相当于 fp = malloc();
图示
操作文件, 使用文件读写函数来完成。 fputc、fgetc、fputs、fgets、fread、fwrite
文件分类
1.设备文件
屏幕、键盘、磁盘、网卡、声卡、显卡、扬声器...
2.磁盘文件:
指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使用时才调入内存。
文本文件:
- 基于字符编码,常见编码有ASCII、UNICODE等
- 一般可以使用文本编辑器直接打开
- 数5678的以ASCII存储形式(ASCII码)为:00110101 00110110 00110111 00111000
二进制文件:
- 基于值编码,自己根据具体应用,指定某个值是什么意思
- 把内存中的数据按其在内存中的存储形式原样输出到磁盘上
- 数5678的存储形式(二进制码)为:
- 00010110 00101110
文件操作的一般步骤
1. 打开文件 fopen() open() popen() --》 FILE *fp; 2. 读写文件 fputc、fgetc、fputs、fgets、fread、fwrite 3. 关闭文件 fclose() close() pclose()
注意这里面,打开文件有多种打开方式,但是与之对应的都有一一映射关系的close,fopen()对应fclose() open()对应close() , popen()对应pclose(), 千万不能混着用
文件访问路径
绝对路径
从系统磁盘的 根盘符开始,找到待访问的文件路径
Windows书写方法: 1)C:\Users\afei\Desktop\06-文件分类.avi (注意是俩个\) 2)C:/Users/afei/Desktop/06-文件分类.avi --- 也使用于Linux。
查看路径方法,右击文件,选择 属性 ,在 安全 找到 属性名称 即可
相对路径
1)如果在VS环境下,编译执行(Ctrl F5),文件相对路径是指相对于 day10.vcxproj 所在目录位置。
2)如果是双击 xxx.exe 文件执行,文件的相对路径是相对于 xxx.exe 所在目录位置。
打开,关闭文件函数
打开函数
FILE * fopen(const char * filename, const char * mode); 参1(filename):待打开文件的文件名(访问路径) 参2 (mode ):文件打开权限
文件打开权限初学只需要会三种
"r": 只读方式打开文件, 文件不存在,报错。存在,以只读方式打开。 "w": 只写方式打开文件, 文件不存在,创建一个空文件。文件如果存在,清空并打开。 "w ":读、写方式打开文件,文件不存在,创建一个空文件。文件如果存在,清空并打开。
总的打开模式
返回值:成功:返回打开文件的指针
失败:返回NULL
关闭函数
int fclose(FILE * stream); 参1:打开文件的fp(fopen的返回值) 返回值:成功 :0, 失败: -1;
例子
注意使用perror的原因是因为可以显示错误的原因