张
张鸿林
Unregistered / Unconfirmed
GUEST, unregistred user!
调用返回pchar的函数,结果无法预料
unit pcharFunc.pas
interface
uses SysUtils ;
function testchar;
implementation
function testchar;
var acount:integer;
s:string;
begin
acount:=0;
s:=pchar('第'+inttostr(aCount+1)+'个改码方案中缺少")"')
//如果 s:='sdfdsfsdf' ,一个常量,则没有问题
result:=pchar(s);//给pchar直接赋值,应该可以省略为pchar分配空间
end;
另外一个单元:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit3.Text:=SCH_ModiSizeExpValidCheck(pchar(edit1.text),pchar(edit2.text));
end;
procedure TForm1.Button1Click(Sender: TObject);
var p,p1char
i:integer;
begin
p:=test;
p1:=p;
edit1.text:=(p1);
showmessage(p1);
end;
这时我们可以发现,edit1.text和showmessage(p)不一样,且结果无法预料
如果 function test 跟调用者同一个单元,结果正常
unit pcharFunc.pas
interface
uses SysUtils ;
function testchar;
implementation
function testchar;
var acount:integer;
s:string;
begin
acount:=0;
s:=pchar('第'+inttostr(aCount+1)+'个改码方案中缺少")"')
//如果 s:='sdfdsfsdf' ,一个常量,则没有问题
result:=pchar(s);//给pchar直接赋值,应该可以省略为pchar分配空间
end;
另外一个单元:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit3.Text:=SCH_ModiSizeExpValidCheck(pchar(edit1.text),pchar(edit2.text));
end;
procedure TForm1.Button1Click(Sender: TObject);
var p,p1char
i:integer;
begin
p:=test;
p1:=p;
edit1.text:=(p1);
showmessage(p1);
end;
这时我们可以发现,edit1.text和showmessage(p)不一样,且结果无法预料
如果 function test 跟调用者同一个单元,结果正常