求助 record 里的string问题 ( 积分: 50 )

  • 主题发起人 主题发起人 hitman007260
  • 开始时间 开始时间
这是因为DELPHI的编译器默认会对结构进行数据对齐.这样有利于速度.
但只要加上packed就不会(如上)这样有利于结约内存空间,但速度会慢一点
 
以上答案统统都是垃圾!!!


回顾楼主的题目

//////////////////////////////////////////////////////////////////////
我定义一个record
type myrecord = record
chr: char;
int: Integer;
longstring: ansistring;
stringa: string[8];
stringb:string;
flg: Boolean;
end;
arrmyrecord= array[0.. 1024] of myrecord;
分别付值后
在程序中使用arrmyrecord数组
从数组中取出来的值
arrmyrecord[0].chr,arrmyrecord[0].int,arrmyrecord[0].stringa,arrmyrecord[0].flg都在
arrmyrecord[0].ansistring,arrmyrecord[0].string得值却不见了
这是为什马?如何解决?
//////////////////////////////////////////////////////////////////////

他写到:
arrmyrecord[0].chr,
arrmyrecord[0].int,
arrmyrecord[0].stringa,
arrmyrecord[0].flg都在

又写到:
arrmyrecord[0].ansistring,
arrmyrecord[0].string得值却不见了 //为什么不见了

请问谁见到楼主定义的结构里面有ansistring和string吗?我见到只有 longstring 和 stringb!

所以换成arrmyrecord[0].longstring ,arrmyrecord[0].stringb 就一定见到了。

这是很低级的语法错误!!!

record 绝对可以使用 string, packed 用于对齐是不能解决问题的。本来都不想看这贴了,
但这些错误答案,不回帖,只会误导更多人。
 
楼上 那是笔误
如果arrmyrecord[0].ansistring,
arrmyrecord[0].string 会编译不过去的
换成arrmyrecord[0].longstring ,arrmyrecord[0].stringb 也看不见
 
本不想回帖,怕大家被误导,[:(!]。

谁说Record中不能用String,谁说Record必须用Packed修饰,谁说一个记录时32字节?
我觉得学习Delphi还是要多看看帮助,尤其是他的BNF和每一个保留字、关键字的说明
 
to hitman00726
笔误,那就是你的电脑放的位置要找风水先生来看看才行,下面是我的控件部分代码,

unit EXPack.CHNDBDropDownManage{$IFDEF CIL}platform{$ENDIF};

interface

uses
Windows, SysUtils, Messages, Classes, DB, DBCtrls, Forms, Variants, EXPack.CHNMatch{$IFDEF CIL}, WinUtils{$ENDIF};

type
TCHNDBDropDownManage = class;

TSortDirection = (sdAscending, sdDescending, sdNone);

TSortedListEntry = record
Str: string
//这是string
FObject: TObject;
end;
PSortedListEntry = ^TSortedListEntry;

TSortedList = class(TList)
public
function GetItem(const I: Integer): PSortedListEntry;
procedure Reset;
end;

TMatchData = record
FieldTexts: array of string
//各字段内容 //动态string数组
PinYinWuBis: array of string
//各字段拼音五笔
MatchLeft: Integer
//匹配左
MatchLength: Integer
//匹配长度
MatchColIdx: Integer
//匹配字段号
PYWBSUI: DWord
//表示匹配
MatchID: Integer
//已匹配行序号
RecNo: Integer;
end;
PMatchData = ^TMatchData;

TMatchSortPoint = class(TObject)
public
MatchData: PMatchData;
IsCurRow: Boolean;
end;

TFastMatchData = record
Text: string;
Row: Integer;
Count: Integer;
end;

TSuperPosStr = record
Left: Integer;
Length: Integer;
end;

TDDMColumn = class(TCollectionItem)
private
FCaption: string;
FWidth: Integer;

从D7~TD.net都通过编译,控件完全正常使用,正准备贴上网
 
后退
顶部