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

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非