C文件操作就这么简单
c文件操作就这么简单
文件操作,稍微一总结.。
FILE是一个结构体类型,在TC和VS中定义不相同,他的作用就是在fopen()之后保存了打开文件的信息。也就是说操作系统帮我们完成了,我们不用管,大大降低了难度吧。
首先我们考虑下对文件的操作,文件类型分为文本和二进制。读写文件的函数一般前面有个f,也就表示file,open,fopen,read,fread,很容易记住。
打开文件后要读写,当前其中关于判断打开是否成功,读写是否成功。。。。我就省略了。打开时设置打开后的操作模式,这个模式直接保存在了FILE结构体的flag中。打开就一个fopen,然后我们先考虑读吧,读写的函数都比较多:
fgetc(),fgetchar(),getc();fgets(),gets(),fread(),fscanf();
前三个是读取单个字符,后三个是读取字符串,一般都是结合while判断是否到了EOF来处理。fscanf()和fprintf()较为复杂,也容易搞混淆,可以这么理解,
fscanf(fp,"%s",name); //从fp指定的文件中以字符串保存在name变量中
fprintf(fp,"%s",name); //将name以字符串的形式保存到fp指定的文件中
fread(a,b,c,d)函数功能强大,可以这么理解,从d中读取c个b长度的数据保存到a中。如:fread(buf, strlen(msg)+1, 1,fp);
fwrite(a,b,c,d)函数功能强大,可以这么理解,从a中读取c个b长度的数据保存到d中。只是a和d位置变换了。如:fwrite(buf, strlen(msg)+1, 1,fp);
有了以上的函数你可以简单的读一个文件了,但是如果想读某个位置,怎么办?读写文件都是通过一个指针来实现的FILE *fp;在fp中保存了一个指向的当前位置的指针,我们要得到这个位置,就用ftell()函数。得到其与文件头的偏移量。如:1,21,23,14,45,63;fp在fopen时指向了1,然后fgetc()呀什么的,就读出了23,当然你通过ftell()就可以知道目前的位置在第三个。如果我们要取离开始位置第4个的数据呢?你可以使用rewind(fp);复位到文件头,在ftell()==4,然后开始读取。当然还有一个更好用的函数fseek(FILE指针,偏移字节数,起始位置);这个函数就相当灵活了,起始位置可以有三个选项:文件开头(SEEK_SET),相当于rewind()了一下;当前位置(SEEK_CUR);文件结尾(SEEK_END)。
综合以上你是不是可以灵活的读一个文件了,对于写的函数:
fputc(),fputchar(),putc();fputs(),puts(),fwrite(),fprintf();和读都是一一对应的,关于他们怎么使用,可以通过看其参数都能明白。
OK,到此读写是不是就这么回事呢,还有一小小点,gets,fgets....
相关文档:
1.区别(主要的):指针需要增加一次额外的提取操作
编译器为每个变量分配一个地址(左值)。这个地址编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(它的右值)只有在运行时才可知。如果需要用到变量中存储的值,编译器就发出指令从地址读入变量值并将它存于寄存器中。
  ......
网马加密中,目前有个function(p,a,c,k,e,d)的,非常讨厌,我也是深恶痛绝,记得我刚开始碰到它的时候,拼命地读函数,那个叫痛苦啊,磕磕绊绊地勉强搞了出来。今天,突然看见了function(p,a,c,k,e,d)的解密代码,高兴都来不及
<script>
a=62;
function encode() {
var code = document.getElementById('code' ......
c变成的对象大多是共享内存中申请,比较少用malloc直接来申请,所以链表设计一般是下面2中结构:
对象 --> 对象 --> 对象
对象 -->链表对象-->对象 -->链表对象
(1)对于第一种,链表直接关联到对象本身,所以如果一个对象在消亡时,没有及时清理掉链表关系,则会导致链表掉链。
(2)链表对象本身是一 ......
宏
全大写, 如果必要, 用连字符连接单词
#define SIZE_LIMIT 1024
#define CONFIG_DEBUG 1
#define PRODUCT_ID 0x1123
枚举
单词首字母大写, 不用连字符
enum {
KeyNumLock,
KeyShift,
Key1,
KayA
} Key;
......