panxiang88 发表于 2007-7-23 11:42

关于wb与w的写入磁盘问题

<P>#include&lt;stdio.h&gt;</P>
<P>void put(int i, FILE *fp);<BR>int get(FILE *fp);</P>
<P>void put(int i, FILE *fp)<BR>{<BR> int j;<BR> char *c;<BR> c = (char *)&amp;i;<BR> for(j=0;j&lt;4;j++)<BR>  fputc(*(c+j),fp);<BR>}</P>
<P>int get(FILE *fp)<BR>{<BR> int i,j;<BR> char *c;<BR> c = (char *)&amp;i;</P>
<P> for(j=0;j&lt;4;j++)<BR>  *(c+j) = fgetc(fp);</P>
<P> return (i);<BR>}</P>
<P>main()<BR>{<BR> FILE *fp;<BR> int i = 100000;<BR> fp = fopen("try","<FONT color=#ff0033>wb</FONT>");<BR> put(i,fp);<BR> fclose(fp);<BR> fp = fopen("try","rb");<BR> i = get(fp);<BR> printf("%d",i);<BR> fclose(fp);</P>
<P> return 0; <BR>}<BR></P>
<P>我写的一个getw,putw的程序,可是有一点儿想不明白,就是,我用wb或w(红字部分)分别写到磁盘上后,他们在磁盘上的存储形式一样吗?我越想越晕,觉得应该不一样,可是查看了一下似乎又一样~~~很不明白~~~~</P>

gamebcc 发表于 2007-10-29 14:44

我也想问问,总觉得b 和t 没什么区别~~

一笔苍穹 发表于 2007-10-30 09:37

w是文本模式写,wb是二进制模式写<BR>举个简单的列子,用分别用两种模式打开再用fprintf(fp, "abc\n");写入内容,同样的用两种模式的fscanf读一个字符串出来并显示,看上去一样吧,再用记事本分别打开两种输出文件看看,其实内容是有区别的,如果你再用winhex之类的软件看,会更清楚这一区别,文本模式和二进制模式对回车的处理不一样,甚至对文件结束标记的识别都不一样,文本模式下的结束标记EOF在二进制模式下是正常的内容。这样一来,若混用两种模式,fseek()定位会不准,文件结束判断可能会搞错等等。<BR><BR>另,建议在文本模式下用fprintf/fscnaf函数,二进制模式用fwrite/fread函数。当然,你也可以反着用试试看结果有什么不同,经验就是在尝试中获得的。

gamebcc 发表于 2007-10-30 14:40

谢谢版主大人...<br>我去试试

页: [1]

编程论坛