关于fstream读写strcut的奇怪问题

zhangyhbais 2007-09-25 12:02:30
定义一个struct:
struct head
{
char v1[8];
char v2[6];
} v_head;

fstream stream;
// 写入文件中
stream.open( "test", ios :: out | ios :: binary );
string v1("ABCABCDE");
sprintf(v_head.v1, v1.c_str());
stream.write( ( char * ) &v_head.v1, sizeof( v_head.v1 ) );

string v2("TODOHP");
sprintf(v_head.v2, v2.c_str());
stream.write( ( char * ) &v_head.v2, sizeof( v_head.v2 ) );

// 从文件中读取
stream.open( "test", ios :: in | ios :: binary );
stream.read( ( char * ) &v_head.v1, sizeof( v_head.v1 ) );
stream.read( ( char * ) &v_head.v2, sizeof( v_head.v2 ) );
cout<<v_head.v1<<"\n"<<v_head.v2<<endl;

★ 迷惑之处
输出结果:
ABCABCDETODOHP <- 对应v_head.v1 ??? 这里不应该是:ABCABCDE 吗?
TODOHP <- 对应v_head.v2

打开test文件,内容如下:
ABCABCDETODOHP


请大家帮忙看看,问题出在哪儿?


...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
药不能停啊 2008-05-28
  • 打赏
  • 举报
回复
再说了,你对v1分配的空间是8个,v1中不含‘\0‘,读取时要读到'\0'或eof才停止的
所以是ABCABCDETODOHP
读取v2时,指针定位到了v2处即“TODOHP”,所以读出来的是对的
药不能停啊 2008-05-28
  • 打赏
  • 举报
回复
stream.write( ( char * ) &v_head.v1, sizeof( v_head.v1 ) );
该句执行完之后,你的文件指针没有换行,
所以是“ABCABCDETODOHP”而不是“ABCABCDE”
taodm 2007-09-25
  • 打赏
  • 举报
回复
sprintf(v_head.v2, v2.c_str());你保留了\0空间么?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧