我有一个函数,它接受一系列char的指针。 我希望从那一点复制256个字符,并将它们放在一个字符串中。
msg不以空值终止。
以下代码似乎给我一些问题。 有没有正确的方法来做到这一点?
Init( msg: PCHAR)
var
myStr: String;
begin
for i:= 1 to 256 do
begin
myStr[i] := msg[i-1];
end;
end;
答案 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);