结构体中的指针

tigerMayDo 2010-06-24 11:26:11
结构体
struct meta_zjzh
{
int points;
short level;
char brokertel[16];
char brokeremail[32];
char brokername[16];
short buf[1];
};

写文件
void WriteZJZH()
{
CFile file;
CString strZJZHPath;
strZJZHPath="zjzh.dat";
if (file.Open(strZJZHPath,CFile::modeWrite|CFile::modeCreate|CFile::shareDenyNone))
{
struct meta_zjzh Kehuinfo;
memset(&Kehuinfo,0,sizeof(meta_zjzh));
Kehuinfo.level = 1;
Kehuinfo.points = 1008;
strcpy(Kehuinfo.brokername , "黄颜");
strcpy(Kehuinfo.brokeremail , "beautifulgirl@163.com");
strcpy(Kehuinfo.brokertel , "0755-88888888");
file.Write(&Kehuinfo,sizeof(struct meta_zjzh));
file.Close();
}
}
请问怎么写入3个short进去:1001,1002,1003

然后将其读出来
读文件
void UpdateZJZH()
{
CFile file;
CString strZJZHPath;
strZJZHPath="zjzh.dat";
if (file.Open(strZJZHPath,CFile::modeRead|CFile::shareDenyNone))
{
struct meta_zjzh Kehuinfo;
file.Read(&Kehuinfo,sizeof(struct meta_zjzh));
level = Kehuinfo.level;
point = Kehuinfo.points;
MgrName = Kehuinfo.brokername;
MgrEmail = Kehuinfo.brokeremail;
MgrTel = Kehuinfo.brokertel;
int a = file.GetLength();
int b = sizeof(Kehuinfo);
int n = (file.GetLength()-sizeof(meta_zjzh)+2)/2;
short* buff = new short[n];
file.Read(&buff,n);
file.Close();
}
}
...全文
207 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tigermaydo 的回复:]
可以在最后一个字段写入3个short型数吗?
怎么写呢
[/Quote]
new一个比sizeof(meta_zjzh)大的空间,你的short buf[1];就有意义了
finder_zhang 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tigermaydo 的回复:]
可以在最后一个字段写入3个short型数吗?
怎么写呢
[/Quote]
可以的,buf[0] = 1;buf[1] = 2;buf[3] = 3;这样就可以了.
但这样做有前提的,就是你的这个结构体的后面,是放着已经准备好可以写的内容.
BITMAPINFO 也是这样处理,后面放颜色表.

例如你有一个空间,大小比你的meta_zjzh要大的,meta_zjzh后面放的是buf的内容.
然后你就可以buf[n]来写,
tigerMayDo 2010-06-24
  • 打赏
  • 举报
回复
可以在最后一个字段写入3个short型数吗?
怎么写呢
zhupf52 2010-06-24
  • 打赏
  • 举报
回复
Eleven 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tigermaydo 的回复:]
short buf[1] 代表什么呢
[/Quote]
柔性数组。。。
tigerMayDo 2010-06-24
  • 打赏
  • 举报
回复
short buf[1] 代表什么呢
healer_kx 2010-06-24
  • 打赏
  • 举报
回复
你这个结构体中只有数据,没有指针啊。
3jaja 2010-06-24
  • 打赏
  • 举报
回复
读文件时改为
file.Read(&Kehuinfo,4);//读 Kehuinfo.bufNum的值
size=sizeof(struct meta_zjzh)+Kehuinfo.bufNum*2-4;
file.Read(&Kehuinfo.points,size);
3jaja 2010-06-24
  • 打赏
  • 举报
回复
结构体改为
struct meta_zjzh
{
int bufNum; //增加 buf 数组的计数器
int points;
short level;
char brokertel[16];
char brokeremail[32];
char brokername[16];
short *buf;
};

Kehuinfo.buf = new short [Kehuinfo.bufNum];
.....
int size=sizeof(struct meta_zjzh)+num*2;
写文件时
file.Write(&Kehuinfo,size);
delete[]Kehuinfo.buf;

读文件时
file.Read(&Kehuinfo,4);//读 Kehuinfo.bufNum的值
size=sizeof(struct meta_zjzh)+Kehuinfo.bufNum*2-4;
file.Read(&Kehuinfo,size);

写文件是
finder_zhang 2010-06-24
  • 打赏
  • 举报
回复
8楼说得对,你这样直接定义一个 struct meta_zjzh Kehuinfo; ,然后写 buf[1],这样是极可能报错的.
不知道楼主你使用的时候,是否知道buf后面跟的数据的大小的?
假设你知道buf的大小.
meta_zjzh* pKehuInfo = (meta_zjzh*)malloc(sizeof(meta_zjzh)+sizeof(short)*2);
这样你才可以去写后面的buf[1],buf[2].

tigerMayDo 2010-06-24
  • 打赏
  • 举报
回复
大家帮帮忙
tigerMayDo 2010-06-24
  • 打赏
  • 举报
回复
struct meta_zjzh Kehuinfo;
memset(&Kehuinfo,0,sizeof(meta_zjzh));
Kehuinfo.level = 1;
Kehuinfo.points = 1008;
strcpy(Kehuinfo.brokername , "黄颜");
strcpy(Kehuinfo.brokeremail , "beautifulgirl@163.com");
strcpy(Kehuinfo.brokertel , "0755-88888888");
file.Write(&Kehuinfo,sizeof(struct meta_zjzh));
short buff[2];
buff[0] = 1001;buff[1] = 1002;
file.Write(&buff,2);
int n = file.GetLength();
file.Close();

我先写结构体然后再写一个short数组 怎么将这个数组读出来呢
这不是鸭头 2010-06-24
  • 打赏
  • 举报
回复
来学习最后short buf[1]; 的使用的。
3jaja 2010-06-24
  • 打赏
  • 举报
回复
short buf[1]; 是危险的,写3个数据改为 short buf[3];//初学者宁大勿小,现在内存上G的,用指针new要记下数量,读写程序麻烦些
因为file.Write(&Kehuinfo,sizeof(struct meta_zjzh)); 写不了3个
file.Write(&Kehuinfo,sizeof(struct meta_zjzh) + 2*2 ); 才行,同样的读也读不出全

有可能造成程序崩溃。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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