我有一个函数,它接收一个指向一系列字符的指针。我希望从该点复制256个字符,并将它们放入一个字符串中。
msg没有以null结尾。
下面的代码似乎给我带来了一些问题。有没有正确的方法来做到这一点?
Init( msg: PCHAR)
var
myStr: String;
begin
for i:= 1 to 256 do
begin
myStr[i] := msg[i-1];
end;
end;
SetString(myStr, msg, 256);
您的代码缺少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,你的代码会出错:它写入了未知的地址,最终会导致访问冲突。
myStr := 'test'
。然后,当然,你不能访问myStr[7]
。你必须设置字符串的长度-然后你才能设置它的字符。 - Andreas Rejbrandmsg
是以空字符结尾的(应该是这样),并且你想要获取的256个字符后面跟着空字符,那么只需执行以下操作:myStr := msg;
msg
太长,你可以这样做:myStr := Copy(msg, 1, 256);
myStr := WideCharLenToString(msg, 256);
myStr:= Copy(msg,1,256);