三、 fwrite与fprintf的区别
1. fprintf(fp, "%d", buffer); 是将格式化的数据写入文件
fwrite(&buffer, sizeof(int),1, fp);是以二进位方式写入文件
2. fprintf写文本文件,用记事本可以打开查看
fwrite写二进制文件
3. fprintf写入时,对于整数来说,一位占一个字节,比如1,占1个字节;10,占2个字节;
所以文件的大小会随数据的大小而改变,对大数据空间占用很大。
fwrite是按二进制写入,写入数据所占空间是根据数据类型来确定,所以二进制写入比格式化写入更省空间
下面针对第三点,举例说明:
* 对于1 2 3 4 5 ,五个整数,用fprintf写入时,占5个字节;而用fwrite写入时,占20个字节。
#include
#include
int main(void)
{
FILE *fp = NULL;
FILE *fw = NULL;
int i = 0;
fp = fopen("./fp.txt", "w");
fw = fopen("./fw.txt", "w");
for(i = 1; i < 6; i++)
{
fprintf(fp, "%d", i);
}
for(i = 1; i < 6; i++)
{
fwrite(&i, sizeof(i), 1, fw);
}
return 0;
}
结果:
[root@f8s fwrite_fprintf]# ls -l *.txt
-rw-r--r-- 1 root root 5 2014-02-11 14:36 fp.txt
-rw-r--r-- 1 root root 20 2014-02-11 14:36 fw.txt
[root@f8s fwrite_fprintf]#
* 对于10000 20000 30000 40000 50000,这五个整数,用fprintf写入时,占25个字节;而用fwrite写入时,还是占20个字节。
#include
#include
int main(void)
{
FILE *fp = NULL;
FILE *fw = NULL;
int i = 0;
fp = fopen("./fp.txt", "w");
fw = fopen("./fw.txt", "w");
for(i = 10000; i < 60000; )
{
fprintf(fp, "%d", i);
i = i + 10000;
}
for(i = 10000; i < 60000; i++)
{
fwrite(&i, sizeof(i), 1, fw);
i = i + 10000;
}
return 0;
}
结果:
[root@f8s fwrite_fprintf]# ls -l *.txt
-rw-r--r-- 1 root root 25 2014-02-11 14:41 fp.txt
-rw-r--r-- 1 root root 20 2014-02-11 14:41 fw.txt
[root@f8s fwrite_fprintf]#