【发布时间】:2015-01-29 08:07:39
【问题描述】:
我在这里对上面给出的问题做了一些研究,并提出了以下代码:
VarStr = array of WideChar;
function ArrayToString(const a: VarStr): UnicodeString;
begin
if Length(a) > 0 then
begin
ShowMessage ('Länge des übergebenen Strings: ' + IntToStr(Length(a)));
SetString(Result, PWideChar(@a[0]), Length(a) div 2)
end
else
Result := '';
end;
ShowMessage 显示给定数组中正确数量的字符,但函数的结果始终为空字符串。
请问你有什么想法?
【问题讨论】:
-
Length(a) div 2表示只使用了一半的字符。而不是PWideChar(@a[0]),你完全可以写@a[0]。演员阵容是不必要的。但是,如果数组的长度为 0 并且您使用范围检查,则代码将产生运行时错误。你应该这样做。所以我会把它写成PWideChar(a)。 -
a[0] , #0 的内容是什么?
-
@bummi 我认为这并不重要
SetString不寻找空终止符 -
@DavidHeffernan 嗯。使用 a[0]=#0 (或未初始化,也许他不知道基于 0)你将得到一个空字符串,而不是缩短的字符串。
-
@DavidHeffernan 不会争辩,他说的是
Showmessage,试试a[0] := #0; a[1] := 'b'; a[2] := 'c'; a[3] := 'd'; Showmessage(ArrayToStringBroken(a));
标签: delphi delphi-xe3