首页 > 上网技巧 > 电脑小技巧 > Delphi的string访问越界出错

Delphi的string访问越界出错

时间:2018-11-19 08:50 作者:QQ地带 我要评论

简单描述
大致的代码如下,意图是从数据表中取出来路径字段,如果路径是没有以’'字符结尾,则添加’'为结尾字符
 
var
  adoQry: TADOQuery;
  path: string;
begin
  ....
 
  path := adoQry.FieldByName('file_path').AsString;
  if '\' <> path[Length(path)] then
  begin
    path := path + '\';
  end;
  
  ....
end;
当数据表的file_path不为’‘时,使用path[Length(path)]来访问最后一个字符是没有问题的
 
但是如果数据表的file_path为’‘时,使用path[Length(path)]实际的效果是path[0],因为string类型是从1开始索引的,如果使用0去索引获取值,就会出现非法内存访问错误!
 
复现问题
编写一个测试程序,string类型的变量str值为空,然后通过str[Length(str)]索引方式去访问str的某个字符
 
procedure TForm1.btn1Click(Sender: TObject);
var
  str: string;
begin
  str := '';
  ShowMessage(str[Length(str)])
end;
点击按钮后运行效果如下,报错:Access violation at address 00452280 in module ‘Project1.exe’. Read of address FFFFFFFF

标签: Delphi
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告