如何将非null终止的char数组转换为字符串?

时间:2010-10-20 13:40:22

标签: string delphi

我有一个函数,它接受一系列char的指针。 我希望从那一点复制256个字符,并将它们放在一个字符串中。

msg不以空值终止。

以下代码似乎给我一些问题。 有没有正确的方法来做到这一点?

Init( msg: PCHAR)
var
 myStr: String;
begin
 for i:= 1 to 256 do
 begin
  myStr[i] := msg[i-1]; 
 end;
end;

4 个答案:

答案 0 :(得分:13)

SetString(myStr, msg, 256);

答案 1 :(得分:3)

您的代码错过了SetLength,更正后的版本为:

Init( msg: PCHAR)
var
 myStr: String;
begin
 SetLength(myStr, 256);
 for i:= 1 to 256 do
 begin
  myStr[i] := msg[i-1]; 
 end;
end;

如前所述,可以更有效地完成作业。

<强>更新

SetLength为myStr分配256个字符+终止0;没有SetLength你的代码是一个错误:它写入通配地址并最终导致访问冲突。

答案 2 :(得分:2)

如果msg以空值终止,应该是,并且要获取的256个字符后跟空字符,只需执行

myStr := msg;

如果msg长于此值,则可以执行

myStr := Copy(msg, 1, 256);

在这种情况下,更好的方法是

myStr := WideCharLenToString(msg, 256);

假设您使用的是Delphi 2009或更高版本,其中字符串是Unicode。

答案 3 :(得分:-1)

myStr:=复制(msg,1,256);