我做了一段程序如下:
type
TTestRecord = record
Name : string[10]; //姓名
Sex : string[4]; //性别
Age : Real; //年龄
end;
var
A : array of Byte;
TestRecord : TTestRecord;
LenOfRecord: Integer;
begin
LenOfRecord := Sizeof(TestRecord);
TestRecord.Name := 'guifuli';
TestRecord.Sex := '男';
TestRecord.Age := 23.00;
SetLength(A, LenOfRecord);
A := @TestRecord;
end;
最后对数组 A 进行处理,发现地址错误,请高手给予指点。谢谢!
type
TTestRecord = record
Name : string[10]; //姓名
Sex : string[4]; //性别
Age : Real; //年龄
end;
var
A : array of Byte;
TestRecord : TTestRecord;
LenOfRecord: Integer;
begin
LenOfRecord := Sizeof(TestRecord);
TestRecord.Name := 'guifuli';
TestRecord.Sex := '男';
TestRecord.Age := 23.00;
SetLength(A, LenOfRecord);
A := @TestRecord;
end;
最后对数组 A 进行处理,发现地址错误,请高手给予指点。谢谢!
type
TTestRecord = record
Name : string[10]; //姓名
Sex : string[4]; //性别
Age : Real; //年龄
end;var
A : array of Byte;
TestRecord : TTestRecord;
LenOfRecord: Integer;
I: Integer;
S: string;
begin
LenOfRecord := Sizeof(TestRecord);
TestRecord.Name := 'guifuli123';
TestRecord.Sex := '男';
TestRecord.Age := 23.00;
SetLength(A, LenOfRecord);
A := @TestRecord; for I := 0 to LenOfRecord - 1 do // <----
S := S + Chr(A[I]); // <----
ShowMessage(S); // <----
end;能够访问的。
type
TTestRecord = record
Name : string[9];
Sex : string[2];
Age : string[3];
end;var
A :^Byte;
TestRecord : TTestRecord;
LenOfRecord: Integer;
I: Integer;
S: string;
begin
LenOfRecord := Sizeof(TestRecord);
TestRecord.Name := 'guihhhhh';
TestRecord.Sex := '男';
TestRecord.Age := '23'; A := @TestRecord; for I :=1 to LenOfRecord do
begin
S := S + Chr(A^);
INC(A);
end;
ShowMessage(S);
end;
end. 我在跟踪的时候,s:=#8'guihhhhh'#2'男'#2'23';
请问这里的#8,#2 是啥东西啊?谢谢。
可是跟踪的时候,不知道啥玩意。#8,#2的。
另外这样的方式,如果声明:name:string[N],如果N的大小超过你所赋实际值的1个,
那么是在编译的时候的结果是s:=#8'guihhhh'#0 一遇到#0的情况下,s 就马上结束了。
这样的方法可取吗?
A : array of Byte;
TestRecord : TTestRecord;
LenOfRecord: Integer;
I, NameLen, SexLen: Integer;
S, StrFloat: string;
RR: PR;
R: Real;
begin
LenOfRecord := Sizeof(TestRecord);
TestRecord.Name := 'guifuli123';
TestRecord.Sex := '男';
TestRecord.Age := 23.00;
SetLength(A, LenOfRecord);
A := @TestRecord; NameLen := High(TestRecord.Name); // <----
SexLen := High(TestRecord.Sex); // <----
SetLength(S, LenOfRecord); // <----
for I := 0 to NameLen + SexLen - 1 do // <----
S[I + 1] := Chr(A[I]); // <----
R := PR(Integer(@TestRecord) + NameLen + SexLen + 2)^;// <----
StrFloat := FormatFloat('0.00', R); // <----
ShowMessage(S); // <----
ShowMessage(StrFloat); // <----
end;可以读取Real。(Real的位置是通过前面的结构计算出来的)