一周学完c系列 第7天笔记 完结篇
本帖最后由 代号3 于 2018-4-17 16:14 编辑指针数组
元素都为指针的数组
int *p[];
数组指针
指向数组的指针
int (*p);
*先和[]结合
int(*p)数组指针数组
*和[]同时出现 先和[]结合
标识符先和[]结合 标识符是数组
标识符先和*结合 标识符是指针
(*p)指针
p 数组指针
(*p)指针数组
*p数组
*(*p); 数组 保存一维数组
结构体指针
访问符号->
文件操作
1·打开文件
2·读写文件
3·关闭文件
概述
文件就是存储在计算机外部存储器中的数据集合
由二进制序列构成 基本存储单位字节
分类
文本文件
都是可显示字符的ASCII码
字节与实际字符一一对应
占用存储空间较大
二进制文件
保存程序数据 程序与程序之间或者程序与设备之间传递的数据
一般无法直接输出,比较节省空间
公开的标准格式
不公开甚至加密的文件格式
打开文件
通过打开操作把流与设备联系起来,可以在程序和文件之间交换数据
通过关闭操作断开流与文件的联系
open:打开文件 获得对此文件的指针 引用和句柄等 以证明可以使用此文件
read:读文件 参数一般指明要读多少字节 读到哪块内存 调用此功能时接着上次的结束调用位置读(是输入流)
write:写文件 参数一般指明把哪块内存的内容写入文件 要写多少字节 每次调用此功能 都是接着上次调用的结束
位置写。(输出流)
seek:随机控制流的当前位置 文件定位
close:关闭文件 表明操作结束 不再使用此文件 文件使用完毕必须关闭 否则影响系统性能
stdio.h中定义了一个FILE文件结构体类型 包含管理和控制文件所需要的各种信息
在c中系统对文件进行的各种操作是通过指向文件结构体的指针变量来实现
定义一个指向文件结构体类型的指针变量的形式
FILE *指针变量名
FILE *fpFile
fopen函数
FILE *fopen(char *文件路径及文件名,char *mode(处理文件的方式))
FILE *fpFile=fopen(“C:\\File.txt”,“r”);
打开模式
mode 处理方式 文件不存在 文件存在 向文件输入 从文件输出
r 读取 出错 打开文件 不能 可以
w 写入 建立新文件 覆盖原文件 可以 不能
a 追加 建立新文件 在原文件后追加 可以 不能
r+ 读取/写入 出错 打开文件 可以 可以
w+ 写入/读取 建立新文件 覆盖源文件 可以 可以
a+ 读取/追加 建立新文件 在原文件后追加 可以 可以
二进制文件在使用时只要在模式后添加字符b即可,eg:“rb”,“rb+”
如果由于文件不存在等原因造成不能打开文件,则调用fopen()后将返回一个空指针NULL,我们可以通过
如下代码检查文件是否打开成功:
if((fpFile=fopen("c:\\File.txt","r")==NULL)
{
printf("Cannot open the file.\n");
exit(1);
}
一般exit(0)表示程序正常退出,exit(非零值)表示程序出错后退出
相对路径
. 表示当前目录
..表示上层目录
安全读写方式 fopen_s( &pFile ,"1.txt","w" );
文件读写
读取文件
逐个字符的读取 fgetc()
伪代码
打开文件
循环判断是否到文件末尾 EOF feof函数
判断语句 eg:while(feof(pFile)!=0)
语句
关闭文件
逐行的读取 fgets()
一行指的是 从当前读写位置到第一个\n即为一行
伪代码
打开文件
定义指针 并置空
按格式读取 fprintf()
fprintf(文件型指针变量,格式控制,输出表列)
符号对应问题 在参数后
以二进制的方式读取指定字节
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:地址,用来存放从文件读入/输出的数据的存储区的地址。
size:读写字节数 sizeof()
count:要读写多少个数据项(每个数据项的长度为size)
写入方式同上
逐个字符的写入 fputc()
伪代码eg:
打开文件
定义数组
for循环
遍历
写入语句(换行会被写入)
关闭文件
逐行的写入 fputs()
伪代码
打开文件
定义写入指针 初始化为空指针 防止野指针
定义某个要读取数据
fputs(字符串,文件型指针变量)
关闭文件,指针置空
按格式写入 fscanf()
符号对应问题
以二进制的方式写入指定字节 fwrite
fwrite(存放地址,大小,数据块的个数,文件型指针)
文件读写位置
设置读写位置 fseek(文件类型指针,偏移量,参照位置)
以文件头为初位置偏移 SEEK_SET
以文件尾为初位置偏移 SEEK_END
以当前光标为初位置偏移 SEEK_CUR
获取当前读写位置 ftell(文件指针)
重置文件读写位置到文件头 rewind(文件指针)
读写小技巧
获取文件的总字节数
先将文件读写位置设置大末尾
fseek(pFile,0,SEEK_END;
再获取此时文件读写位置
int nSize=ftell(pFile);
重置文件读写位置到文件头
fseek(pFile,0,SEEK_SET);
rewind(pFile);
想要获得一个大的存储空间就可以使用malloc申请堆空间 然后调用freed直接读取
eg:char*pFileData=NULL;
pFileData=(char*)malloc(nSize);
if(pFileData==NULL)
{
printf("没有足够内存\n");
return 0;
}
项目相关
项目管理
源文件头文件的组织
项目分解(完整项目分解为不同的模块)
功能分解实现越细愈好 思路清晰
eg:密码本
程序可以提供哪些功能
添加保存密码
定义结构体数组保存
结构体设计
可增长的数组
堆空间实现增长
增加一个密码结构体到数组
从数组中删除一个密码结构体
查找密码
字符串匹配函数遍历
删除密码
修改密码
加载与保存数据
对保存到文件中的数据加密解密
管理员加密解密功能
交互接口
功能菜单
项目模块 模块代码应独立的保存到一个.c的文件中
操作数据模块
加密解密模块
头文件
保存结构体 宏 函数声明等声明信息
禁止定义全局变量
标识符的命名方式
多文件的管理
其余的注意项
信或不信,第7天笔记更新完毕
每天10小时以上,3小时多一些听课,下午晚上6小时左右练习复习,一周,我在15PB见证了学完c系列,给大佬跪了 明天开始做项目,后续发帖应该是新的内容了
鬼知道,我经历了什么——魔鬼学习进程!!看着习题很崩溃啊~~
这个之前不太完整 你提醒之后我去百了下 笔记没错的 可能是过于省略造成误会 你可以看下图 代号3 发表于 2018-4-18 20:30
emm 能具体指出哪里错了么 这个是昨天晚上整理完上传的 比较仓促 谢谢
*先和[]结合
错过会难过 发表于 2018-4-18 17:29
笔记记错了,差评
emm 能具体指出哪里错了么 这个是昨天晚上整理完上传的 比较仓促 谢谢 笔记记错了,差评
页:
[1]