C++寫文件fprintf與fwrite函數用法與差異

C++寫文件fprintf與fwrite函數用法與差異

參考https://www.cnblogs.com/hhddcpp/p/4303572.html

總而言之:如果要讓生成的文件自己可以看得懂,那麼就選擇fprintf,如果想看不懂,那就用fwrite,兩者只是寫入方式不同,生成的文件倒都是計算機可讀的

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

發佈了7 篇原創文章 · 獲贊 5 · 訪問量 436
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章