gpt4 book ai didi

Delphi - W1048 'string' 到 'TFormatSettings' 的不安全类型转换

转载 作者:行者123 更新时间:2023-12-03 15:10:18 26 4
gpt4 key购买 nike

我正在将一个旧项目移植到 Delphi XE,并且在下面的代码中收到此警告。

function RemoveThousandSeperator(Text: String) : String;
Var P : Integer;
begin
if length(Text) > 3 then begin
p := Pos(FormatSettings.ThousandSeparator,Text);
while p >0 do begin
Delete(Text,p,1);
p := Pos(FormatSettings.ThousandSeparator,Text);
end;
end;
result := Text;
end;

甚至 FormatSettings.ThousandSeparator 也是 char 类型。

LE:我问是否有人可以告诉我为什么会出现此警告。代码是旧的,将重新编写。

LE2:为了获得此警告,需要在 Delphi 编译器提示和警告中将所有警告设置为 true

LE3:如果有人需要它 - {$WARN UNSAFE_CAST OFF} 会使警告消失。

LE4:警告的屏幕截图,供那些认为该警告难以相信的人

enter image description here

最佳答案

警告的来源是 SysUtils.pasFormatSettings 变量的声明:

var
// Note: Using the global FormatSettings variable corresponds to using the
// individual global formatting variables and is not thread-safe.
FormatSettings: TFormatSettings absolute CurrencyString;

将字符串 (CurrencyString) 转换为记录 (TFormatSettings)。

因此,生成警告的问题是在 SysUtils.pas 中,而不是在您发布的代码中,尽管警告是在您的代码中生成的。

<小时/>

这是一个测试用例(Delphi XE):

program Project1;

{$APPTYPE CONSOLE}
{$WARN UNSAFE_CAST ON}

type
TTest = record
FS: string;
end;

var
Str: string;
Test: TTest absolute Str;

begin
Str:= 'abc';
Writeln(Test.FS); // W1048 Unsafe typecast of 'string' to 'TTest'
end.

关于Delphi - W1048 'string' 到 'TFormatSettings' 的不安全类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com