pchar转换成string后,字符串发生变化 ( 积分: 50 )

  • 主题发起人 主题发起人 kenxy
  • 开始时间 开始时间
K

kenxy

Unregistered / Unconfirmed
GUEST, unregistred user!
情况如下:
s1:pchar;
s2:string;
转换前:
s1所指向的内容为:'68A400006860316800111168A128111111E9DC7432222222220100010000000000000000000001000000030000000200006000800008D116BD16'
经以下语句转换后:
s2:=string(s1);
或s2=s1;
或s2:=strpas(s1);
结果变s2内容变为:'68A400006860316800111168A1281111'#0#0'E9DC7432222222220100010000000000000000000001000000030000000200006000800008D116BD16'

在一个dll工程中,相关代码如下:
var
tx,rx:pchar;
tempstr,str1:string;
begin
.............
tx:='68A00000689001313216';
SendHex(port,tx,rx);
rx:='68A400006860316800111168A128111111E9DC7432222222220100010000000000000000000001000000030000000200006000800008D116BD16';
tempstr:=string(rx);
...................



搞不清楚啥原因,望高人指点!
 
情况如下:
s1:pchar;
s2:string;
转换前:
s1所指向的内容为:'68A400006860316800111168A128111111E9DC7432222222220100010000000000000000000001000000030000000200006000800008D116BD16'
经以下语句转换后:
s2:=string(s1);
或s2=s1;
或s2:=strpas(s1);
结果变s2内容变为:'68A400006860316800111168A1281111'#0#0'E9DC7432222222220100010000000000000000000001000000030000000200006000800008D116BD16'

在一个dll工程中,相关代码如下:
var
tx,rx:pchar;
tempstr,str1:string;
begin
.............
tx:='68A00000689001313216';
SendHex(port,tx,rx);
rx:='68A400006860316800111168A128111111E9DC7432222222220100010000000000000000000001000000030000000200006000800008D116BD16';
tempstr:=string(rx);
...................



搞不清楚啥原因,望高人指点!
 
procedure TForm1.Button1Click(Sender: TObject);
var // 顯示結果是一樣的呀
s1:pchar;
s2:string;
begin
s1:='68A400006860316800111168A128111111E9DC7432';
showmessage(s1);
s2:=s1;
showmessage(s2);
end;
 
我用的是DELPHI7,在dll中用到这段代码,调试结果就是不一样,会不会编译器有问题呢?
 
用shortstring 型
 
其中s1是另外一个函数的输出值,直接对s1赋值是没有问题,我这也没有问题!在线等待!
 
未能解决问题
 
var
tx,rx:pchar;
你的rx是局部变量,如果他作为返回值,指针指向的位置要用GetMem分配内存,否则一出了这个函数的作用域,指针区域就变成可以写的了,程序可能其它代码会写入的。
关于dll的PChar有些约定最好遵守,如果函数要返回pchar作为结果或者result,请最好使用参数返回,比如func1(ResultPchar: PChar);并且请在调用func1的exe文件中分配ResultPChar的内存,如果可能还要给func1多传个参数,给出pchar的长度,以免越界。WindowsAPI都是这样做的。
 
接受zqw0117的答案,给50分!
 
后退
顶部