在Delphi XE2中,System.Str发生了一些变化.以下程序:
procedure someProcedure;
var
E:double;
outString:string;
begin
E:=-1.7E+308;
Str(E:i:j, outString);
end;
Run Code Online (Sandbox Code Playgroud)
引发访问冲突
(异常类$ C0000005,访问冲突0x00407318:读取地址0x30303028)
在Delphi XE2中,'i'和'j'是整数.这个相同的代码在Delphi 2010中运行正常并返回outString =' - 1.7E + 0308'.在一些TurboPower Orpheus组件中使用了类似的代码,它会导致整个IDE在BEX错误时崩溃.
这是在Win7 64位.有任何想法吗?
编辑:额外信息
这似乎只发生在负数大的情况下.Str似乎会生成长字符串,当它们超过~130个字符时会断开.
注意:当仅使用宽度(其中i =某个宽度)时,这不会中断
procedure someProcedure;
var
E:double;
outString:string;
begin
E:=-1.7E+308;
Str(E:i, outString);
end;
Run Code Online (Sandbox Code Playgroud)