文件读写函数介绍

注:输入输出是站在内存的角度来看的

一文件顺序读写函数介绍

1.字符输入函数fgetc(适用于所有输入流)

 参数为文件指针,是从文件中读取一个字符,并将该字符的ASCII码值返回,读取完后文件指针指向文件中的下一个字符,当然最开始是指向文件中的第一个字符。

2.字符输出函数fputc(适用于所有输出流)

 字符输出是从内存输出一个字符到文件中,所以参数1是输入字符的ASCII码值,参数2是输入的目的——文件指针指向的文件,返回值为输出的字符

 3.文本行输入函数fgets(适用于所有输入流)

 从FILE*指针指向的文件中读取num个字符复制到char*str的位置处,若是文件中一行字符不够num, 也会停止读取,会在str末尾补\0,所以实际只读取了num-1个字符给str。

4.文本行输出函数fputs(适用于所有输出流)

 将str指向的字符串复制到文件中去,同时我们还可以看到char*str用const修饰,这使得代码更严谨,免得出现我们将源字符串修改的情况。

 5.格式化输入函数fscanf(适用于所有输入流)

 将文件中的数据格式化读取到内存中,而const char*format的后面则是可变参数列表,这个可变参数列表,和printf参数是一样的,第一个为格式字符串参数,而后面的则为%d,%s提供数据的参数,由于这部分的参数数量未知,所以说是参数个数是可变的。还有就是下面格式字符串的两种形式是等价的,但是通常用偏复杂的第一种。

	char arr6[20] = { "he is a boy" };
	printf("hello world");
    printf(arr6);

6.格式化输出函数fprintf(适用于所有输出流)

 将参数按照格式输入到文件里。

7.二进制输出函数fwrite(只能用于文件)

参数1为输出数据的地址,参数2为输出数据中单个元素的大小,count为元素个数,最后一个参数为写入文件的地址。再这里我们可以看到参数1是用void*指针接收,这其实是为了函数的通用性,与qsort参数设计是类似的。

8.二进制输入函数fread(只能用于文件)

fread函数和fwrite函数参数是一样的,只是数据的起始地和目的地不同。

二函数对比:

(1)scanf和fscanf和sscanf

scanf和fscanf他们之间的区别在于适用范围,scanf是标准输入函数,只适用于标准输入流,而fscanf适用于所有输入流,要说清楚区别还要先解释一个概念——流,什么是流呢?数据上传到不同的设备的方式是不一样的,如果我们要上传数据,可能要学会上传到不同设备的方法,这会很麻烦,所以c语言抽象出流的概念,我们只需要将数据传到流上,系统会帮我们处理不同流到不同设备上。而printf和scanf是标准输出输入函数,这意味着printf只能把数据输出到标准输出流(标准输出流对应的设备就是我们的屏幕),scanf同样只能从标准输入流中(对应设备也就是我们的键盘)获取数据,fscanf适用于所有输入流,那说明fscanf也可以从标准输入流中读取数据,fprintf也可以将数据上传到标准输出流上。

int a = 0;
	fscanf(stdin,"%d",&a);我把文件指针换成stdin这个标准输入流
	printf("%d", a);      结果我们仍能打印出数字,这说明fscanf确实适用于所有输入流
                          并且说明文件指针实质维护的是文件流,但是该文件流不是默认打开的
                          所以要用fopen,不然文件这么多,难道都要默认打开
                          而键盘,屏幕却是默认打开的,所以我们可以直接用。

还有就是sscanf不是从某个流中读取数据,而是从某个字符数组中读取数据,使用如下,

char arr[20] = {"he is a boy"};
	char arr1[10] = { 0 };
	char arr2[10] = { 0 };
	char arr3[10] = { 0 };
	char arr4[10] = { 0 };
	sscanf(arr, "%s %s %s %s", arr1, arr2, arr3, arr4);
	printf("%s ", arr1);
	printf("%s ", arr2);
	printf("%s ", arr3);
	printf("%s ", arr4);

(2)printf和fprintf和sprintf

其中printf和fprintf的区别也是适用范围,标准输出流为stdout,大家可以结合上述例子尝试用fprintf代替printf使用。而sprintf其实也就是与sscanf函数相反功能的函数, 将参数所给的数据按照格式输出到参数1指针指向位置处。(这两个函数在某些地方的使用我觉得是一样的,但此处区别十分明显)

    char arr[20] = {"he is a boy"};
    char arr1[10] = { 0 };
	char arr2[10] = { 0 };
	char arr3[10] = { 0 };
	char arr4[10] = { 0 };
    char arr5[20] = { 0 };
	sscanf(arr, "%s %s %s %s", arr1, arr2, arr3, arr4);
   printf("arr5之前的为:%s\n", arr5);
	sprintf(arr5," %s %s %s %s", arr1, arr2, arr3, arr4);
	printf("调用了sprintf后arr5变为:%s",arr5);

三文件随机读写函数(这块大家了解作用就好了)

(1)fseek

根据文件指针的位置和偏移量来定位文件指针

参数2是偏移量(向左为负,向右为正),参数3是位置,有如下选择1.seek_set(从文件指针初始位置调整):   seek_cur(从当前文件指针位置):      seek_end(从文件末尾位置调整)

(2)ftell(参数和rewind一样都是文件指针)

返回文件指针相对于起始位置的偏移量

(3)rewind

让文件指针回到文件的起始位置

以上就是所有我了解的文件函数,希望对大家有所帮助。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小何只露尖尖角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值