var
Str:String;
begin
Form1.Caption:='Test';
Str:='1234567890';
GetWindowText(Handle,PChar(Str),10);
ShowMessage(Str);//错误:弹出1234567890
以上代码修改后:
var
Str:String;
begin
Form1.Caption:='Test';
Str:='1234567890';
@Str[1]; //此处只取地址,什么都不做
GetWindowText(Handle,PChar(Str),10);
ShowMessage(Str);//正确:弹出Test
end;
红花
2009年1月 C++ Builder大版内专家分月排行榜第一 2008年12月 Delphi大版内专家分月排行榜第一 2008年11月 Delphi大版内专家分月排行榜第一 2008年10月 Delphi大版内专家分月排行榜第一 2008年6月 Delphi大版内专家分月排行榜第一 2008年1月 Delphi大版内专家分月排行榜第一 2005年7月 C++ Builder大版内专家分月排行榜第一
黄花
2009年1月 Delphi大版内专家分月排行榜第二 2008年12月 C++ Builder大版内专家分月排行榜第二 2008年7月 Delphi大版内专家分月排行榜第二 2005年7月 Delphi大版内专家分月排行榜第二
蓝花
2009年5月 Delphi大版内专家分月排行榜第三 2009年4月 Delphi大版内专家分月排行榜第三 2009年3月 Delphi大版内专家分月排行榜第三 2009年2月 C++ Builder大版内专家分月排行榜第三 2009年2月 Delphi大版内专家分月排行榜第三 2008年11月 C++ Builder大版内专家分月排行榜第三 2008年8月 C++ Builder大版内专家分月排行榜第三 2008年7月 C++ Builder大版内专家分月排行榜第三 2008年6月 C++ Builder大版内专家分月排行榜第三 2008年5月 Delphi大版内专家分月排行榜第三 2005年8月 C++ Builder大版内专家分月排行榜第三
procedure WriteData(P: PChar);
var
i: Integer;
S: String;
begin
S := 'Test'#0;
for i := 1 to Length(S) do
begin
P^ := S[i];
Inc(P);
end;
end;
var
Str, S: string;
i: integer;
begin
Form1.Caption := 'Test';
SetLength(S, 10);
for i := 1 to Length(S) do
S[i] := Chr(Ord('0') + i - 1);
Str := S;//'0123456789'
WriteData(PChar(Str));//我们修改的是Str内容
ShowMessage(S);//S<>'0123456789'了,而为'Test'#0'56789',弹出的为'Test',#0以后的不显示
end;