我在这里做了一些关于上面给出的问题的研究并得出以下代码:
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;
Run Code Online (Sandbox Code Playgroud)
ShowMessage在给定数组中显示正确的字符数,但该函数的结果始终为空字符串.
你的想法好吗?
您传递的是错误的长度值.你只要求一半的角色.像这样修复你的代码:
function ArrayToString(const a: VarStr): string;
begin
SetString(Result, PWideChar(a), Length(a));
end;
Run Code Online (Sandbox Code Playgroud)
但是,您还报告您的函数返回一个空字符串.最可能的原因是您将无效输入传递给函数.考虑这个程序:
{$APPTYPE CONSOLE}
type
VarStr = array of WideChar;
function ArrayToStringBroken(const a: VarStr): UnicodeString;
begin
SetString(Result, PWideChar(@a[0]), Length(a) div 2);
end;
function ArrayToStringSetString(const a: VarStr): UnicodeString;
begin
SetString(Result, PWideChar(a), Length(a));
end;
var
a: VarStr;
begin
a := VarStr.Create('a', 'b', 'c', 'd');
Writeln(ArrayToStringBroken(a));
Writeln(ArrayToStringSetString(a));
end.
Run Code Online (Sandbox Code Playgroud)
输出是:
ab abcd
因此,除了问题中代码的问题之外,您似乎也遇到了问题中不存在的代码问题.
也许当你说:
函数的结果始终为空字符串.
实际上,当您将返回的值传递给时,不会显示任何文本ShowMessage.这完全是另一回事.正如@bummi在注释中指出的那样,ShowMessage将在遇到的第一个空终止符处截断其输入.使用适当的调试工具来检查变量的内容.
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |