关于fwrite()写文件

来源:百度知道 编辑:UC知道 时间:2024/05/23 18:00:54
#include"stdio.h"
void main()
{
unsigned int a[9]={1,2,8,5,6,7,6,4,5};
unsigned int *p=a;
int i=0;
FILE *pFile;
pFile=fopen("e:\\test.txt","w");
fwrite(a,sizeof(unsigned int),9,pFile);
fprintf(pFile,"\n");
fwrite(a,sizeof(a),1,pFile);
fprintf(pFile,"\n");
fwrite(p,sizeof(unsigned int),9,pFile);
fprintf(pFile,"\n");
for(;i<9;i++)
fprintf(pFile,"%u ",a[i]);
fclose(pFile);
}输出到文件中的结果为:
        
        
        
1 2 8 5 6 7 6 4 5
为什么?

fwrite一般用来写入char*,int*不能这么写。
因为通常我们写入int到文件希望看到效果是一个数,如1,2,3等。但是int占2个或4个字节,用fwrite写入时,一个int是按2个或4个字节写到文件中的,而文件显示时是按一个字节一个字节的显示内容,它不会把4个字节连续起来显示,所以它不可能是1,2,3这样的单字符字样。除了格式化输入外,我想不到其他的好方法。
而char因为就占一个字节,则用fwrite可以很方便的写入,如下程序可以正常看到文件内容。
#include <stdio.h>
#include <string.h>

int main(void)
{
char i[]={'1','2','3','4','5'};
FILE *fp;
fp = fopen("c:/test.txt","w");

fwrite(i,strlen(i),1,fp);
fclose(fp);
return 0;
}

看看你的文件的16进制:
00000000h: 01 00 02 00 08 00 05 00 06 00 07 00 06 00 04 00
00000010h: 05 00 0D 0A 01 00 02 00 08 00 05 00 06 00 07 00
00000020h: 06 00 04 00 05 00 0D 0A 01 00 02 00 08 00 05 00
00000030h: 06 00 07 00 06 00 04 00 05 00 0D 0A 31 20 32 20
00000040h: 38 20 35 20 36 20 37 20 36 20 34 20 35 20

"01 00" -- 就是整数1
"02 00" -- 就是整数2
&qu