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. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  2. 前端代码优化: 使用YUI Compressor

    通过压缩组件,可以显著减少HTTP请求和响应事件.这也是减小页面大小最简单的技术,但也是效果最明显的. 压缩JS,CSS代码有几种常用插件,YUI Compressor是个不错的选择.通过maven的 ...

  3. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(八)-- 多环境开发

    本篇将演示Asp.Net Core如何在多环境下进行开发适配. 在一个正规的开发流程里,软件开发部署将要经过三个阶段:开发.测试.上线,对应了三个环境:开发.测试.生产.在不同的环境里,需要编写不同的 ...

  4. Objective-C特点

    1.兼容性 OC是一种面向对象的C语言,在OC的代码中可以有C和C++语句,它可以调用C函数,也可以通过C++对象访问方法. 2.字符串 OC通常不使用C语言风格的字符串.大多数情况下(CoreFou ...

  5. Linux服务器的初步配置流程

    作者: 阮一峰 日期: 2014年3月14日 开发网站的时候,常常需要自己配置Linux服务器. 本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情.这主要是我自己的总结和 ...

  6. C++多态性的浅析

    多态性是C++的一个重要特性,[不扯淡直接进入正题] 灵活运用多态,首先得知道类之间的继承.  当B继承了A类后,一般都是公有继承.  B的实例化对象的内存空间结构若是了解 就可以合理利用多态了. A ...

  7. Google账户无法登陆-Solved

    Author:KillerLegend Date:2014.5.19 From:http://www.cnblogs.com/killerlegend/p/3737888.html 这几天不知道怎么回 ...

  8. Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

    问题提示:Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace. ...

  9. Keil的使用方法 - 常用功能(一)

    Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单 ...

  10. jquery.tmpl 用法(附上详细案例)

    js的模板引擎就和服务端的差不多,都是更好更快的拼接html用于显示,我参考了文章:http://www.cnblogs.com/zhuzhiyuan/p/3510175.html tmpl常用标签 ...