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,两者只是写入方式不同,生成的文件倒都是计算机可读的

最新文章

  1. bootstrap学习笔记--bootstrap安装环境
  2. Excel实用技巧
  3. Java程序内存分析:使用mat工具分析内存占用
  4. Spring学习笔记(一) Spring基础IOC、AOP
  5. UVALive 3211 Now or later(2-SAT,二分,Kosaraju)
  6. Qt5对Json的读写
  7. Mocha 从0开始
  8. Head First PHP &amp;amp;MySQL学习笔记
  9. 在QT中引用Shark Machine Learning library
  10. RT-thread 利用Scons 工具编译提示python编码错误解决办法
  11. ExpandableListView使用
  12. python开发:初识python
  13. day 12 名称空间和闭包函数
  14. 【转】利用python的KMeans和PCA包实现聚类算法
  15. UI自动化(二)css选择器
  16. 关于静态资源是否应该放到WEB-INF目录
  17. Ubuntu 12.04安装VMware Workstation8.0.3
  18. SQLServer2005 CASE WHEN在项目中实例-查询显示值替换
  19. Oracle查询session连接数和inactive以及 概要文件IDLE_TIME限制用户最大空闲连接时间
  20. Android ListView 几个重要属性

热门文章

  1. CentOS学习笔记--基本命令--文件与目录管理
  2. CentOS学习笔记--时间
  3. 解决DataGridView在多线程中无法显示滚动条的问题
  4. Win7下 httpRequest带证书请求https网站
  5. SVN客户端解决authorization failed问题
  6. 一款jQuery满屏自适应焦点图切换特效
  7. yhd日志分析(二)
  8. 理解ruby on rails中的ActiveRecord::Relation
  9. About Inside the Azure Storage Outage of November 18th
  10. EChart 关于图标控件的简单实用