我在学习一个简单的二进制文件读写操作时发现一个奇怪的问题。
pf = fopen(fpath,"rb+"); //fpath文件路径
if( pf==NULL )
return false;
char* str="你好";
fwrite(str,4,1,pf);
char tmp[4]="";
fread(tmp,4,1,pf);以上是我测试的代码,应该说很简单的一段。本意是在文件开头写入你好俩字,在读出随后的4字节数据。
处理前文件内容:“一二三四五六”,处理后变成“你好屯屯五六”,屯屯二进制为CD CD CD CD。
这个结果出乎我的意料。随后我把fread那两行去掉了,结果就正确了,处理后变成“你好三四五六”。
也就是说,fread操作把原本的三四两字覆盖成了CD CD CD CD,我想请问高手这是为什么?我只是读操作阿。难道问题出在fopen参数rb+上面?
pf = fopen(fpath,"rb+"); //fpath文件路径
if( pf==NULL )
return false;
char* str="你好";
fwrite(str,4,1,pf);
char tmp[4]="";
fread(tmp,4,1,pf);以上是我测试的代码,应该说很简单的一段。本意是在文件开头写入你好俩字,在读出随后的4字节数据。
处理前文件内容:“一二三四五六”,处理后变成“你好屯屯五六”,屯屯二进制为CD CD CD CD。
这个结果出乎我的意料。随后我把fread那两行去掉了,结果就正确了,处理后变成“你好三四五六”。
也就是说,fread操作把原本的三四两字覆盖成了CD CD CD CD,我想请问高手这是为什么?我只是读操作阿。难道问题出在fopen参数rb+上面?
解决方案 »
- 生成DLL文件的相关问题
- 如何截取windows下 文件夹的双击、打开等事件消息
- 最后100分了求用GetDIBits和SetDIBits设置某点颜色的方法
- 一个框架里两个view如何通信
- 我想自己响应窗口的最大化消息,设置窗口大小和位置,但是怎么修改窗口的最大化图标呢?
- 如何在ListCtrl中画趋势图
- 请问怎样把某RGB彩色转换成其它颜色的不同等级?
- BEGIN_EVENTSINK_MAP BEGIN_SINK_MAP //有啥区别。。。
- 关于宏定义
- AFX_01_H__8DEC479D_11E4_4E82_A9E8_E4CEB7A5651A__INCLUDED_菜鸟级问题
- 如何将tab控件中包含的编辑框进行数据交换?
- 《深入浅出MFC》中第一个例子generic可否在VC中编译
pf = fopen(fpath,"rb+"); //fpath文件路径
fseek(pf,0,SEEK_END);
if( pf==NULL )
return false;
char* str="你好";
fwrite(str,sizeof(char),4,pf);
我本意是把文件最开头那里覆盖掉,SEEK_END并不需要。
但混在一起用就要出错,奇怪阿
pf = fopen("C:\\fx.txt","r+"); //fpath文件路径
char* str="你好";
fwrite(str,strlen(str),1,pf);
fclose(pf);pf = fopen("C:\\fx.txt","rb+");
char tmp[8]="";
fread(tmp,sizeof(char),4,pf);
fclose(pf);
MessageBox(tmp);
MSDN例子:
#include <stdio.h>void main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten; /* Open file in text mode: */
if( (stream = fopen( "fread.out", "w+t" )) != NULL )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
/* Write 25 characters to stream */
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream ); }
else
printf( "Problem opening the file\n" ); if( (stream = fopen( "fread.out", "r+t" )) != NULL )
{
/* Attempt to read in 25 characters */
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
我这串代码是测试函数用简单写的,并不严格,但功能上是正确的。
只是有些奇怪为什么会有这样的冲突呢?MSDN中并没有找到相关内容阿