StrToDate()没有参数化的TFormatSettings会抛出AV吗?

Jus*_*tMe 3 delphi

只是为了好奇:为什么这段代码给出AV而不是抛出异常?

procedure TForm1.Button1Click(Sender: TObject);
var fs: TFormatSettings;
begin
  strtodate('2011-01-01', fs);
end;
Run Code Online (Sandbox Code Playgroud)

DiG*_*iGi 12

您的代码引发异常,因为fs未初始化.

  uses SysUtis, Windows;

  procedure TForm1.Button1Click(Sender: TObject);
  var fs: TFormatSettings;
  begin
    GetLocaleFormatSettings(GetSystemDefaultLCID, fs); // what is your short-date format?
    strtodate('2011-01-01', fs);
  end;
Run Code Online (Sandbox Code Playgroud)

  • 局部变量根本没有初始化.它们包含随机数据,使用该无效数据将导致AV. (3认同)
  • 初始化本地`string`变量,Digi和`TFormatSettings`包括该类型的字段.它们将被初始化.在Delphi 2005中,可能还有其他版本,`StrToDate`调用`TryStrToDate`,调用`ScanDate`,`ScanDate`调用`FormatSettings.ShortDateFormat [1]`,而不检查`1`是否是该字符串的有效索引.如果在启用范围检查的情况下编译RTL,则错误看起来会有所不同. (3认同)