搜索
查看: 1507|回复: 8
打印 上一主题 下一主题

请问各位,涉及文件的读写是否一定要使用到指针呢?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-13 11:32:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
关于C里面的文件读写,是不是一定会用到指针呢?
需要的话怎么编写最简便?不需要的话,又怎么编写呢?

谢谢,如果有重复的帖子,请删除本帖。

最佳答案

查看完整内容

需要用指针 C语言里有一个叫文件指针的东西。 声明一个文件指针变量可使用如下方式: 其中fp即文件指针的名字。 当然,只有一个文件指针是做不了任何事的,要用一个函数fopen打开文件,并将之关联到一个文件指针,如: 意即以可读写(r+)方式打开a.txt,并将之关联到fp(一个文件指针),如出现错误(如文件不存在),则fp为NULL。 更多对打开文件的读写控制(即fopen的第二个参数)可参考各大C语言书籍或网上搜索。 ...
沙发
发表于 2014-3-13 11:32:39 | 只看该作者
需要用指针
C语言里有一个叫文件指针的东西。
声明一个文件指针变量可使用如下方式:
  1. FILE* fp;
复制代码

其中fp即文件指针的名字。
当然,只有一个文件指针是做不了任何事的,要用一个函数fopen打开文件,并将之关联到一个文件指针,如:
  1. fp=fopen("a.txt","r+");
复制代码

意即以可读写(r+)方式打开a.txt,并将之关联到fp(一个文件指针),如出现错误(如文件不存在),则fp为NULL。
更多对打开文件的读写控制(即fopen的第二个参数)可参考各大C语言书籍或网上搜索。
使用文件的目的当然是为了对文件进行读写,C标准库当然提供了这类函数。

读文本文件一般使用fscanf,用法和scanf几乎完全一样,只是需要在其他参数之前提供要读取文件的文件指针。同理fprintf(写入文本文件)用法与printf也类似,当然也需提供文件指针。

读写数据块(即一次性对一个结构体或数组进行二进制读写,简单的说也就是写入文件的东西只有程序本身看得懂),可以使用fread和fwrite(请务必配套使用这两个函数,即用fwrite写入的数据要用fread读),
例如:
  1. int array[10];
  2. fread (array,sizeof(int),10,fp) ;
复制代码

意即从fp所指的文件中读10个大小为sizeof(int)的数据(如果没有弄错文件的话,那么就是读10个int),并放入array中,
也就是说:
第一个参数是数据将要被读入的地址(指针),第二个是单个该种数据的占用的内存大小(一般用sizeof求得),第三个是读入数据的个数,第四个是个文件指针。

fwrite用法与freed类似,只是功能相反,再次强调,fwrite写入的数据要用fread读,用fscanf读取fwrite写入的数据,或用fread读取fprintf写入的数据,一般情况下都是行不通(会产生运行时错误)的。

使用完文件后,要用fclose关闭文件,如:
  1. fclose(fp);
复制代码

fp是一个文件指针。

另外,还有fseek等辅助读写文件的函数,请自行读书学习。

评分

参与人数 1啊哈币 +2 收起 理由
李掌柜 + 2 写的挺详细~~必须加分~~

查看全部评分

板凳
发表于 2014-3-13 12:50:20 | 只看该作者
标准库是一定要用到指针的
怎么写都一样,所以也没有最简便和不简便之分……
地板
发表于 2014-3-13 15:49:45 | 只看该作者
FILE *fp;                              
5#
发表于 2014-3-13 17:45:40 | 只看该作者
本帖最后由 李掌柜 于 2014-3-13 17:59 编辑

C最可怕难学的地方就是指针,最强大的地方也是指针

费话就说到这,这位大神写的很直白了http://blog.chinaunix.net/uid-22889411-id-59688.html
当然,如果你基本功不错可以试的看哈这著作<C和指针>


C和指针.jpg (48.91 KB, 下载次数: 17)

C和指针.jpg

彻底搞定C语言指针详解-完整版-时候初学者-必备.rar

12.02 KB, 下载次数: 5

6#
发表于 2014-3-14 21:31:07 | 只看该作者
981013 发表于 2014-3-13 11:32
需要用指针
C语言里有一个叫文件指针的东西。
声明一个文件指针变量可使用如下方式:

fprintf家族和fread家族的区别说错了
fprintf家族是格式化输入/输出,速度比fread家族慢很多
fread家族不一定要读写二进制,二进制和纯文本的区别在于fopen的参数上
7#
发表于 2014-3-14 22:14:23 | 只看该作者
简尔言之 :电脑的任何操作都是需要地址的支持的!
8#
发表于 2014-3-14 23:54:22 | 只看该作者
超神级 发表于 2014-3-14 22:14
简尔言之 :电脑的任何操作都是需要地址的支持的!

和这个没关系
C没有其他合适的抽象手段而已(例如引用)
9#
发表于 2014-3-15 12:41:33 | 只看该作者
rosynirvana 发表于 2014-3-14 23:54
和这个没关系
C没有其他合适的抽象手段而已(例如引用)

嗯!是的!感觉自己对好多东西的概念模糊化了.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表