1.概念和作用

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

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

2.用法

2.1 fwrite 函数

示例一:

/* fwrite example: write buffer */
#include "stdafx.h"
#include <stdio.h> int main(int argc, char* argv[])
{ FILE * pFile;
char buffer[] = { 'x' , 'y' , 'z' };
pFile = fopen ("D://myfile.txt", "wb");
fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
return 0;
}

  

打开是:

示例二:

/* fwrite example: write buffer */

#include "stdafx.h"
#include <stdio.h> int main(int argc, char* argv[])
{ FILE * pFile;
int buffer[] = { 64,66,78 };
pFile = fopen ("D://myfile.txt", "wb");
fwrite (buffer , sizeof(int), sizeof(buffer), pFile);
fclose (pFile);
return 0;
}

  

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

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

2.2 fprintf 函数

示例三:

/* fprintf example */
#include "stdafx.h"
#include <stdio.h> int main(int argc, char* argv[])
{ FILE * pFile;
int n;
char name [100]; pFile = fopen ("D://myfile1.txt","w");
for (n=0 ; n<3 ; n++)
{
puts ("please, enter a name: ");
gets (name);
fprintf (pFile, "Name %d [%-10.10s]\n",n,name);
}
fclose (pFile); return 0;
}

  

打开生成的文件是:

示例四:

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

/* fprintf example */
#include "stdafx.h"
#include <stdio.h> int main(int argc, char* argv[])
{ FILE * pFile;
int n;
char name [100]; pFile = fopen ("D://myfile.txt","w");
for (n=0 ; n<3 ; n++)
{
puts ("please, enter a name: ");
gets (name);
//fprintf (pFile, "Name %d [%-10.10s]\n",n,name);
fwrite (name , sizeof(char), sizeof(name), pFile);//修改此处 }
fclose (pFile); return 0;
}

  

文件打开就是:

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. Linux动态库的查找路径

    前两天写了一个动态库,然后试图编译到程序里面去运行,结果发现编译的时候通过gcc的-L参数来指定路径仅仅能让编译通过,运行时还是会出问题的. 比如下面这个例子: main.c是主程序,sum.c中间含 ...

  2. C#winform在textbox插入内容换行

    要让一个TextBox显示多行文本就得把它的Multiline属性设置为true,可是如果你是要把TextBox的Text属性设置多行文本时可能会遇到点麻烦,也许你会想到直接加一个换行符"\ ...

  3. Git客户端图文详解如何安装配置GitHub操作流程攻略

    收藏自 http://www.ihref.com/read-16377.html Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具; 保存点 : ...

  4. php教程一,变量

    php是一种动态脚本语言,比较适合web开发. php支持8种变量数据类型: 四种标量类型: boolean(布尔型) integer(整型) float(浮点型,也称作 double) string ...

  5. ajaxFileUpload增加附加参数

    直接说方法: $.ajaxFileUpload({ data:{"a":123,"b":456};//附加参数,json格式 }); 然后在ajaxFileUp ...

  6. 使用mitmf 来绕过HSTS站点抓取登陆明文

    使用mitmf 来绕过HSTS站点抓取登陆明文 HSTS简介 HSTS是HTTP Strict Transport Security的缩写,即:"HTTP严格安全传输".当浏览器第 ...

  7. spring(spring boot)笔记

    1.查看数据库连接:org.springframework.boot.autoconfigure.jdbc里的public DataSource dataSource() 方法.在这里打断点,可以查看 ...

  8. Ghost命令使用方法

    我们知道,一般使用Ghost时,都是在DOS提示符后先键入"Ghost",然后再进入Ghost的图形界面操作:那么可不可以让Ghost也只通过命令行的方式工作呢?答案是肯定的,在键 ...

  9. 【C#】使用C#将类序列化为XML

    直接上代码: public static class XmlSerializer { public static void SaveToXml(string filePath, object sour ...

  10. XAML(3) - 附带属性

    WPF元素也可以从父元素中获得特性.例如,如果Button元素为了Canvas元素中,按钮的Top和Lef属性把父元素的名称作为前缀.这种属性成为附带属性: <Canvas> <Bu ...