C语言各个读写操作的区别是什么?

2024-06-02 01:36
文章标签 语言 区别 读写操作

本文主要是介绍C语言各个读写操作的区别是什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题

        在C语⾔中,打开⼀个⽂件,对这个⽂件的操作包括:读出数据、写⼊数据、⽂件定位和出错检测⼏种。主要的操作是对⽂件的读写操作,读写操作有很多种,那么多种读写操作存在什么区别呢?

二、解答

        ⽂件的读写操作有 fputc( ) 函数和 fgetc( ) 函数、fread( ) 函数和 fwrite( ) 函数、fprintf( ) 函数 和 fscanf( ) 函数,还有很多其他的读写函数,下⾯对这⼏种读写操作分别介绍:

1、字符读写函数 fgetc( ) 和 fputc( )

        字符读写函数是以字符为单位的读写函数。每次可从⽂件读出或向⽂件写⼊⼀个字符。

(1) fgetc( ) 函数的作⽤是从指定的⽂件中读⼀个字符

函数调⽤的形式为:

c=fgetc(fp);

        表示从打开的⽂件f中读取⼀个字符并赋给c。

对于 fgete( ) 函数的使⽤需要注意如下⼏点:

  • 在fgete( ) 函数调⽤中,读取的⽂件必须是以读或读写⽅式打开的。
  • 读取字符的结果可以不向字符变量赋值,但是读出的字符不能保存。

(2) fputc( ) 函数的作⽤是把⼀个字符写⼊指定的⽂件中

函数调⽤的形式为:

fputc(c,fp);

        其中,c 为要输出的字符,可以是⼀个字符常量,也可以是字符变量;fp 是⽂件指针变量。

        这个函数表示将字符(c的值)输出到 fp 所指的⽂件中去。此函数的返回值就是输出的字符,如果输出失败,则返回⼀个 EOF(-1),EOF 是在 stdio.h 头⽂件中宏定义的常量,值为-1。

使⽤ fputc( ) 函数需要注意如下两点:

  • 被写⼊的⽂件可以⽤写、读写、追加⽅式打开。
  • 每写⼊⼀个字符,⽂件内部位置指针向后移动⼀个字节。

2、读写数据块的函数 fread( ) 和 fwrite( )

        读写数据块的函数 fread( ) 和 fwrite( ) 的⼀般调⽤形式为:

fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);

        其中,参数 buffer 表示⼀个指针,是读⼊数据的存放地址或者输出数据的地址;参数 size 表⽰要读写的字节数:参数 count 表示要进⾏读写多少个 size 字节的数据;参数 fp 是⽂件型指针。

例如:

fread(p,4,2,fp);

        此例表示从 fp 所指的⽂件中,每次读 4 个字节(⼀个实数)送⼊实数组 fa 中,连续读2次,即读 2 个实数到 fa 中。

        使⽤读写数据块的函数 fread( ) 和 fwrite( ) 时需要注意,它们⼀般⽤于⼆进制⽂件的输⼊与输出,因为它们是按照数据块的长度来处理输⼊与输出的,在字符发⽣转换时容易出现与设想不同的情况。

3、格式化读写函数 fscanf( ) 和 fprintf( )

        这两个函数与输⼊输出函数 scanf( ) 和 printf( ) 很相似,但是两者的区别是 fscanf( ) 函数和 fprintf( ) 函数是⽤于读写磁盘⽂件中的数据,⽽不是读写终端数据。它们的⼀般调⽤形式为:

fscanf(⽂件指针,格式字符串,输⼊列表);
fprintf(⽂件指针,格式字符串,输出列表);

例如:

fscanf(p,"%d,%f",&a,&b);

        如果磁盘⽂件上存有 10,6.81,则此函数表示将 fp 所指的磁盘⽂件中的整数 10 送给变量 a ,将实数 6.81送给变量 b 。

int a=6;
float b=4.56;
fprintf(fp,"%d,%5.3f",a,b);

        上例表示向 fp 所指的磁盘⽂件中写⼊⼀个整型数字 6 和⼀个浮点型数字 4.56 。在磁盘上会显示为:

6, 4.560

        在使⽤此函数时,由于在输⼊时要将 ASCII 码转换为⼆进制,在输出时又要将⼆进制形式转换为字符,花费在转换上的时间⽐较多。因此,在内存与磁盘频繁交换数据的情况下,尽量不要使⽤此函数。

三、总结

        在C语⾔中还存在很多其他的读写函数,例如,读写字符串的函数 fets( ) 和 fputs( ) 等, 因为不常⽤到所以不做过多介绍。在上述介绍的读写函数中,要注意区分它们的⽤法,以及打开⽂件的形式。

这篇关于C语言各个读写操作的区别是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022674

相关文章

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法