1.概念和作用

fwrite是C语言函数,指向文件写入一个数据块,写入的是

fprintf是C/C++中的一个格式化写-库函数,其作用是格式输出到一个流/文件中;原型是int fprintf( FILE *stream, const char *format, [ argument ]...),fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件。

2.用法

2.1 fwrite 函数

示例一:

  1. /* fwrite example: write buffer */
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4.  
  5. int main(int argc, char* argv[])
  6. { FILE * pFile;
  7. char buffer[] = { 'x' , 'y' , 'z' };
  8. pFile = fopen ("D://myfile.txt", "wb");
  9. fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
  10. fclose (pFile);
  11. return 0;
  12. }

  

打开是:

示例二:

  1. /* fwrite example: write buffer */
  2.  
  3. #include "stdafx.h"
  4. #include <stdio.h>
  5.  
  6. int main(int argc, char* argv[])
  7. { FILE * pFile;
  8. int buffer[] = { 64,66,78 };
  9. pFile = fopen ("D://myfile.txt", "wb");
  10. fwrite (buffer , sizeof(int), sizeof(buffer), pFile);
  11. fclose (pFile);
  12. return 0;
  13. }

  

执行后生成的文件,打开是:

那么,问题就来了,为什么示例一生成的文件没有乱码,示例二的打开就乱码了呢?请看区别

2.2 fprintf 函数

示例三:

  1. /* fprintf example */
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4.  
  5. int main(int argc, char* argv[])
  6. { FILE * pFile;
  7. int n;
  8. char name [100];
  9.  
  10. pFile = fopen ("D://myfile1.txt","w");
  11. for (n=0 ; n<3 ; n++)
  12. {
  13. puts ("please, enter a name: ");
  14. gets (name);
  15. fprintf (pFile, "Name %d [%-10.10s]\n",n,name);
  16. }
  17. fclose (pFile);
  18.  
  19. return 0;
  20. }

  

打开生成的文件是:

示例四:

若是稍微修改一下上述代码,改成fwrite,

  1. /* fprintf example */
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4.  
  5. int main(int argc, char* argv[])
  6. { FILE * pFile;
  7. int n;
  8. char name [100];
  9.  
  10. pFile = fopen ("D://myfile.txt","w");
  11. for (n=0 ; n<3 ; n++)
  12. {
  13. puts ("please, enter a name: ");
  14. gets (name);
  15. //fprintf (pFile, "Name %d [%-10.10s]\n",n,name);
  16. fwrite (name , sizeof(char), sizeof(name), pFile);//修改此处
  17.  
  18. }
  19. fclose (pFile);
  20.  
  21. return 0;
  22. }

  

文件打开就是:

3. 区别

问题一:示例一和示例二,为什么一个是可读的,一个是乱码呢?

答:用fwrite 写入文件的如果是能够表示为字符,那么就会显示为字符,如果显示不出来,那就写的是二进制内容(所谓的乱码)

问题二:示例三和是四,为什么一个可读,一个是乱码?

答:fprintf写的是数字转换成ASCII码之后的字符。

用记事本打开看下,fwrite写的打开是乱码,fprintf写入的是可读的字符

其实这四个示例生成的文件用fopen都是可读的,四个文件都没有错

总而言之:如果要让生成的文件自己可以看得懂,那么就选择fprintf,如果想看不懂,那就用fwrite,两者只是写入方式不同,生成的文件倒都是计算机可读的

fwrite ,fprintf的作用与区别的更多相关文章

  1. 基于Java的打包jar、war、ear包的作用与区别详解

      本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下   以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...

  2. ubuntu sudo update与upgrade的作用及区别

    ubuntu sudo update与upgrade的作用及区别 入门linux的同志,刚开始最迫切想知道的,大概一个是中文输入法,另一个就是怎么安装软件.本文主要讲一下LINUX安装软件方面的特点. ...

  3. BeanFactory和ApplicationContext的作用和区别

    BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责be ...

  4. .h头文件和.c文件的作用和区别

    .h头文件和.c文件的作用和区别 在小工程中,.h的作用没有得到充分的使用,在大工程中才能充分体现出.h文件的作用. .h和.c文件都是代码.头文件好处有: 一:头文件便于共享,只需要添加一句“inc ...

  5. (转)Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别

    Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别 ava.io下面有两个抽象类:InputStream和 ...

  6. java打包jar,war,ear包的作用、区别

    java的打包jar,war,ear包的作用,区别,打包方式. a) 作用与区别      i.    jar: 通常是开发时要引用通用(JAVA)类,打成包便于存放管理      ii.   war ...

  7. 环境变量配置的作用和区别:Path、Classpath、JAVA_HOME

    环境变量配置的作用和区别:Path.Classpath.JAVA_HOME 一个是零时配置,另一个是永久性配置. 零时配置的方法: 打开cmd窗口——>输入set命令,回车——>输入set ...

  8. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...

  9. JS pop push unshift shift的作用与区别

    白话JS中数组方法pop push unshift shift的作用与区别,通过本文,你大概能知道这四种数组方法的基本使用与大致区别. 首先,这四种方法会直接修改数组,请先记住这一点. 我们先把pop ...

随机推荐

  1. ctags对部分目录生成tags

    最近在研究Tiny6410上的uboot移植,看uboot源码时,生成tags文件用的是最粗暴的方法:“ctags -R *”,由于某些函数在各个平台下都有实现,导致在用“g+]”跳转到该函数的定义时 ...

  2. html Doctype作用?

    Doctype它主要的作用来声明html的版本 <!Doctype html>这是html5的 不写可能会造成html5的功能不能用(具体会不会出错就要看浏览器的容错性)

  3. kettle教程(1) 简单入门、kettle简单插入与更新。打开kettle

    本文要点:Kettle的建立数据库连接.使用kettle进行简单的全量对比插入更新:kettle会自动对比用户设置的对比字段,若目标表不存在该字段,则新插入该条记录.若存在,则更新.   Kettle ...

  4. XP极限编程

    13个核心实战  团队协作(Whole Team)  规划策略(The Planning Game) 软件发布计划(ReleasePlanning) 周期开发计划(IterationPlanning) ...

  5. echarts简单使用案例

    先上效果图:

  6. 《Google 代码风格指南》

    <Google 代码风格指南> https://github.com/google/styleguide

  7. MongoDb 与 Nodejs服务器的启动

    1) 启动MongoDB : MongoDB —dbpath databaseNameFolder. 2) 启动数据库 : Mongo DatabaseName. 3) 启动NodeJs: Node ...

  8. 将数组之中的省份市区地区ID改成对用中文字符

    数据表数据源的省市区联动: 原始数据: //获取所有学校信息 $school=D('school'); $info=$school->getList(); 数据如下: 1 => array ...

  9. yii2解析非x-www-form-urlencoded类型的请求数据(json,xml)

    组件配置添加: 'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', 'applicat ...

  10. (转)Arcgis API常用接口调用方法

    var map, navToolbar, editToolbar, tileLayer, toolbar;//var mapBaseUrl = "http://localhost:8399/ ...