fwrite ,fprintf的作用與區別


 

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; 
}

  

打開是:

image

示例二:

/* 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; 
}

  

執行后生成的文件,打開是:

image

那么,問題就來了,為什么示例一生成的文件沒有亂碼,示例二的打開就亂碼了呢?請看區別

 

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; 
}

  

打開生成的文件是:

image

示例四:

若是稍微修改一下上述代碼,改成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; 
} 

 

  

文件打開就是:

image

 

3. 區別

問題一:示例一和示例二,為什么一個是可讀的,一個是亂碼呢?

答:用fwrite 寫入文件的如果是能夠表示為字符,那么就會顯示為字符,如果顯示不出來,那就寫的是二進制內容(所謂的亂碼)

問題二:示例三和是四,為什么一個可讀,一個是亂碼?

答:fprintf寫的是數字轉換成ASCII碼之后的字符。

用記事本打開看下,fwrite寫的打開是亂碼,fprintf寫入的是可讀的字符

其實這四個示例生成的文件用fopen都是可讀的,四個文件都沒有錯

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM