-
栈:
局部变量,程序运行期间的变量分配大部分是在栈空间分配,函数结束后,系统自动回收资源,空间比较小。
-
堆:
堆空间比较大,可以由程序员自由支配,只能手动申请和释放(malloc()申请的空间在堆上,free()释放空间,即申请的空间如果不用一定要释放,不然时间长会出现内存不足的问题)
-
段错误
----指针:常量指针/NULL指针/野指针
----数组:数组越界访问,访问到非法取余或者修改了其他变量
----其他:内存不足,双释放,内存泄露
-
栈和队列
栈:先进先出
压栈:push();
出栈:pop();
队列:先进先出
-
宏
#define LEN sizeof(STU)
#undef LEN
//取消宏定义
#if
#elsif
#else
#endif
-
文件
1.普通文件:-
2.目录文件:d
3.链接文件:l
4.管道文件:p
5.设备文件:b
6.字符文件:c
文件信息:索引节点(index)
文件操作:文件描述符(fd)linux系统:65535
-
文件的定义
一组相关数据的有序集合,即为文件。
-
文件的操作
打开:fopen(文件名,属性);
关闭:fclose(文件指针);
注:文件使用后一定需要关闭!
文件指针:文件指针结构体:FILE(包含了文件的基本信息)#include <stdio.h>
定义文件指针:FILE *指针变量名
文件名:可以是已存在的,也可以是不存在的
属性:
+:可读写
t:文本文件
b:二进制文件
r(读)
w(写)
a(追加)
rt,wt,at,rb,wb,ab,rt+,wt+,at+,rb+,wb+,at+
rt+/wt+:可读写
rt/rb:只读
wt/wb:只写,带w属性的,可以写文件,若文件已存在,则清除文件重新写文件;若不存在,则以给定文件名创建文件。
r:带r属性的文件,必须存在!!!
*fgetc()/fputc():字符读写
fgets()/fputs():字符串读写
fscanf()/fprintf():格式化读写
fread()/fwrite():块读写
注:重点掌握fscanf()/fprintf()或者fread()/fwrite()至少掌握一种
在c89标准中,fread()/fwrite()有bug
----文件的结束标志EOF。
rewind(文件指针):将文件指针指向文件头
-
fgetc/fputc
fgetc(文件指针);读取一个字符
fputc(字符,文件指针);输出一个字符
-
fgets/fputs
fgets(字符数组/字符串常量/指针,size,fp);
fputs(arr,fp)
stdin:标准输入----》键盘
stdout:标准输出----》终端
stderr:错误输出----》终端
-
fscanf()/fprintf()
fscanf(fp,"格式",参数列表);
fprintf(fp,"格式",参数列表
-
fread()/fwrite()
fread(address,sizeof,count,fp);
fwrite(address,sizeof,count,fp);按块写入数据。
address:地址
count:读写的块数,一般情况下默认1;