为什么showmessage(string(listview1.selected.imageindex));出错??(30分)

  • 主题发起人 主题发起人 ztzdelphi
  • 开始时间 开始时间
Z

ztzdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
属性imageindex在delphi文档中类型为integer
但上句 的string换为inttostr则一切解决
为什么??? 多谢了!
 
inttostr就是把integer换为string的函数,当然正确了……
 
为什么string不行,哪位高手能指教???
谢过
 
一般来说,强制类型转换要在占用字节数相同的数据类型之间进行,在顺序型内部、
实型内部、指针类型之间也可以,至于为什么我也不知道……
 
强制转换要在两者类型兼容的情况下才对,但INTEGER类型在内存块中放的是实际值,而STRING类型在内存块中放的是指针,你看一下INTTOSTR的源码就知道其复杂
度,INTTOSTR是另开辟了一块内存来放转换后的STRING;
DELPHI源码:
UNIT SYSUNTILS;

procedure FmtStr(var Result: string; const Format: string;
const Args: array of const);
var
Len, BufLen: Integer;
Buffer: array[0..4097] of Char;//注意这句
begin
BufLen := SizeOf(Buffer);
if Length(Format) < (BufLen - (BufLen div 4)) then
Len := FormatBuf(Buffer, BufLen - 1, Pointer(Format)^, Length(Format), Args)
else
begin
BufLen := Length(Format);
Len := BufLen;
end;
if Len >= BufLen - 1 then
begin
while Len >= BufLen - 1 do
begin
Inc(BufLen, BufLen);
Result := ''; // prevent copying of existing data, for speed
SetLength(Result, BufLen);
Len := FormatBuf(Pointer(Result)^, BufLen - 1, Pointer(Format)^,
Length(Format), Args);
end;
SetLength(Result, Len);
end
else
SetString(Result, Buffer, Len);
end;
 
string(integer) 仅当integer保存的整数值是指向string的PChar指针(PChar(string))值时候正确
 
多人接受答案了。
 
后退
顶部