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,兩者只是寫入方式不同,生成的文件倒都是計算機可讀的