初学者提问:结构体的使用,高手请进(200分)

  • 主题发起人 主题发起人 HuangJH
  • 开始时间 开始时间
H

HuangJH

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初学结构体,弄不太明白。请高手多多指教!
在C中的结构体如下:(使用了结构体嵌套)
结构体1:
============================================================================
typedef struct tCardInfor {
char nTYPE[2]; //类别
char NAME[21]; //姓名
char MOBILEPHONE[31];//手机
char CORPORATION[31];//公司
//85
char PHONE[31]; //电话
char EMAIL[31]; //EMAIL
char FAX[31]; //传真
char POPO[31]; //POPO
//124
char QQ[31]; //QQ
char HOBBY[101]; //爱好
char BIRTH[21]; //生日
char ADDRESS[101]; //地址
char NOTE[301]; //备注
//555 764
}CARDINFOR,*CARDINFORptr;
=====================================================================
结构体2:
=====================================================================
typedef struct tCARD
{
int Version;
int number;
int rev1;
int rev2;
CARDINFOR cardList[200];
}CARD;
=====================================================================
现在有个问题:
在Delphi中如何改造C的两个结构体?

请高手帮忙,不胜感激。200分相送。
 
你试试:
type PCardInfor = ^TCardInfor ;
TCardInfor = record
nTYPE : String; //类别
NAME : String; //姓名
MOBILEPHONE : String; //手机
cCORPORATION : String; //公司

PHONE : String; //电话
EMAIL : String; //EMAIL
FAX : String; //传真
POPO : String; //POPO

QQ : String; //QQ
HOBBY : String; //爱好
BIRTH : String; //生日
ADDRESS : String; //地址
NOTE : String;
end;
type PCARD = ^TCARD ;
TCARD = record
Version: Integer;
number: Integer;
rev1: Integer;
rev2: Integer;

cardList: TList; //队列元素为TCardInfor类型结构体
end;
 
来晚了[:D]
 
To Dey-99 :
谢谢您的参与,可是把所有的都定义成String那么如何定位 长度?
这里要求严格取特定位数的字符组合。
 
nTYPE:array[1..2] of Char;
 
请大家踊跃发言,200分相送。问题我已经解决,但方法不是很不好。
集思广益!
 
如果是ERP类的,用string没问题
如果是服务器,最好改成array of char,在程序中设置长度setlength()
string是种效率很低的数据类型
还有,你的cardList,如果可以,最好改用stringhash,而不是tlist等重量级的链表
stringhash存储了对象的地址,一样使用(不过好象没borland没在帮助里发布,你可以进vcl里详细看看用法)
 
谢谢你的参与:
该系统为编辑类似手机名片组文本信息的软件。
也就是说手机的名片文件可以导入到电脑用本软件编辑,然后也可以导入手机。
文件为自定义类型。 文件结构为两个结构体的结构。
 
foxphone2003,
你說的stringhash對象是Tstringhash類的實例麽?delphi沒有這個的智能提示,請問在那個文件裏可以看到他的源代碼呢?

感覺Tstringlist比Tlist要好。
 
小提示:

如果你的结构体里用了 string

如:
PMyStruct = ^TMyStruct;
TMyStruct = record
test:string;
test2:string;
end;

那你必须用 new 来创建结构体,如
var p:PMyStrcut;

new(p);

disponse(p);


如果结构体是 array[0..255] of char; 定长方式的
可以用 GetMem 或 SysGetMem 或 FreeMem 或 SysFreeMem 来操作
 
type PCardInfor = ^TCardInfor ;
TCardInfor = record
nTYPE : String[2]; //类别
NAME : String[21]; //姓名
MOBILEPHONE : String[31]; //手机
cCORPORATION : String[31]; //公司

PHONE : String[31]; //电话
EMAIL : String[31]; //EMAIL
FAX : String[31]; //传真
POPO : String[31]; //POPO

QQ : String[31]; //QQ
HOBBY : String[101]; //爱好
BIRTH : String[21]; //生日
ADDRESS : String[101]; //地址
NOTE : String[301];
end;
type PCARD = ^TCARD ;
TCARD = record
Version: Integer;
number: Integer;
rev1: Integer;
rev2: Integer;

cardList: TList; //队列元素为TCardInfor类型结构体
end;
 
好象说了没人听.

算了,不说了.
 
我替楼上顶下
 
不好意思,前连天出差去了, 没能关注我的问题,实在抱歉。 请大家继续畅谈,然后揭帖散分。
 
多些大家参与[:)]
 
后退
顶部