fprintf和fwrite的一点“怪异”现象

2024-02-06 16:08

本文主要是介绍fprintf和fwrite的一点“怪异”现象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      我们先来看一个简单的程序:

 

#include<stdio.h>int main()
{int a = 0;int len = sizeof(a);// 相当于在log1中以文本文件方式输入0// 文件对应的比特串实际为00110000FILE *fp1 = fopen("log1", "w");fprintf(fp1, "%d", a);fclose(fp1);// 文件对应的比特串实际为00000000000000000000000000000000FILE *fp2 = fopen("log2", "wb");fwrite(&a, len, 1, fp2);fclose(fp2);return 0;
}

     同样是为了存一个整数0,log1和log2是不一样的,这是正常的。下面,我们来继续看程序:

 

 

#include<stdio.h>int main()
{char c = 'a';int len = sizeof(c);FILE *fp1 = fopen("log1", "w");fprintf(fp1, "%c", c);fclose(fp1);FILE *fp2 = fopen("log2", "wb");fwrite(&c, len, 1, fp2);fclose(fp2);return 0;
}

     结果,log1和log2居然是一样的,大家可以思考一下为什么。接着看程序:

 

 

#include<stdio.h>
#include<string.h>int main()
{char s[] = "hello world";int len = strlen("hello world");FILE *fp1 = fopen("log1", "w");fprintf(fp1, "%s", s);fclose(fp1);FILE *fp2 = fopen("log2", "wb");fwrite(s, len, 1, fp2);fclose(fp2);return 0;
}

     结果,log1和log2居然也是一样的,原因与上类似。

 

     可见,在针对字符和字符串时候,fwrite写了之后,实际上还是文本文件。

 

     我们再看程序:

 

#include<stdio.h>int main()
{int a = 9;int len = sizeof(a);FILE *fp1 = fopen("log1", "wb");fwrite(&a, len, 1, fp1);fclose(fp1);// fwrite最好不要和"w"混用FILE *fp2 = fopen("log2", "w");fwrite(&a, len, 1, fp2);fclose(fp2);return 0;
}

     结果,log1和log2完全一样。继续看下面程序:

 

 

#include<stdio.h>
#include<string.h>int main()
{char s[] = "hello world";int len = strlen("hello world");FILE *fp1 = fopen("log1", "w");fprintf(fp1, "%s", s);fclose(fp1);FILE *fp2 = fopen("log2", "wb");fwrite(s, len, 1, fp2);fclose(fp2);// fwrite最好不要和"w"混用FILE *fp3 = fopen("log3", "w");fwrite(s, len, 1, fp3);fclose(fp3);return 0;
}

      结果, log1, log2, log3三个文件完全一样。

 

     可见,在写文件时,用什么打开,并不重要,关键是用fprintf还是用fwrite.

 

 

这篇关于fprintf和fwrite的一点“怪异”现象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

温差电现象

温差电现象练习题 1. 两种不同的金属A和B构成温差电偶,冷端温度为0℃,热端温度为T,塞贝克系数为αAB,写出热电势的表达式。 2. 什么是温差电动势?它与哪些因素有关? 3. 解释珀尔帖效应和汤姆逊效应,并说明它们之间的区别。 4. 一块长为10cm,截面积为1mm2 的铜条,两端温度差为100K,铜的电导率为5.8×107 S/m,计算通过铜条的热流密度。 5. 一个温差电偶的热电

超声波清洗机哪个品牌比较好一点的?清洁力强的超声波清洗机品牌

随着生活水平的不断提升和幸福感的增强,珠宝、饰品和眼镜等物品已成为许多家庭的常备之物。然而,这些贵重细小的物件易于积聚微尘与隐形细菌,长此以往可能悄悄影响家人的健康,毕竟细菌是肉眼难以察觉的隐患。超声波清洗机应运而生,它以高科技手段有效地解决了这一隐忧,深层清洁,守护家人免受微小污染物的潜在威胁。不过现在市面上超声波清洗机品牌挺多的,究竟有哪些品牌的超声波清洗机比较好一点呢?接下来就为大家带来四款

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器: Kunpeng-920 内存: 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysql数据集群 现象描述 环境描

关于证书链的一点认知

文章来源 作者:小叶与小茶 链接:https://www.jianshu.com/p/fcd0572c4765 来源:简书 顾名思义,证书链是由一串数字证书链接而成,为了弄清楚这个概念,先看看什么是数字证书。 一、数字证书的基础知识 数字证书是用来认证公钥持有者身份合法性的电子文档,以防止第三方冒充行为。数字证书由 CA(Certifacate Authority) 负责签发,关

【C++学习(28)】通俗一点讲解:std::bind 回调技术

std::bind 是 C++11 标准库中的一个功能,它允许你“绑定”某些参数到一个函数、成员函数或可调用对象上,从而生成一个新的可调用对象。这种新的可调用对象可以稍后被调用,而且其中一些参数已经被预先设置好了。这在回调函数和异步编程中特别有用。 下面我用一个通俗的例子来解释 std::bind 是如何工作的。 假设场景 假设你有一个家庭厨师,他有一个技能叫做“做饭”。做饭需要两个参数:一

2024最全自学黑客技术学习路线,带你少走一点弯路!

谈起黑客,可能各位都会想到:盗号,其实不尽然;黑客是一群喜爱研究技术的群体,在黑客圈中,一般分为三大圈:娱乐圈 技术圈 职业圈。 娱乐圈:主要是初中生和高中生较多,玩网恋,人气,空间,建站收徒玩赚钱,技术高的也是有的,只是很少见。 技术圈:这个圈子里面的黑客是为了能把黑客技术玩到极致的技术狂人,我最佩服的就是这群人,希望以后自己也能成为这样的人。 职业圈:这里面的人群主要就是玩HC为主了

sphinx里 java接口中对错误信息封装的一点记录

SphinxResult result = sphinx.Query(String queryString, String index, String comment);下面是实现:/** Connect to searchd server and run current search query. */public SphinxResult Query ( String query,

【CFD教程】水中翼型空化现象模拟

一、案例背景 空化是液体中出现局部低压产生空泡的现象,比如螺旋桨、水泵等空化会造成金属腐蚀。通过本案例模拟,将定性地看到具有翼型截面的水泵叶片高速运动时,表面出现的低压空泡区域。 本案例需要的输入文件和参数信息如下表: 图1 网格模型 二、 网格处理 1. 新建工程 a. 启动AICFD 2024R1; 图2 AICFD窗口

printf sprintf fprintf

c语法 1.printf  .   sprintf   .   fprintf 1.1.printf 是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。  1.2.sprintf sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。 1.3fprintf fprintf, 是把格式字符串输出到指定文件设备中,所

【智能制造-30】机器人飞车现象

什么是机器人飞车? 机器人飞车是指机器人在运行过程中出现失控加速的异常现象。表现形式如下: 速度异常升高 正常情况下,机器人的运动速度是由其控制系统根据预设的程序和指令进行精确控制的。但在飞车状态下,机器人的电机转速会突然大幅增加,导致整体运动速度远超正常范围。例如,一个工业机器人在执行装配任务时,原本以稳定的速度进行操作,突然之间速度急剧上升,可能对周围的设备、工件以及操作人员造成严重的安全