使用Delete()时访问违反00000000;

| 我正在尝试删除字符串开头的每个字符,而不是Alpha字符。 但是,当字符串中仅包含非字母字符(例如\“ !! \”或\“?!?\”)时,它将吐出访问冲突! 这是我的代码:
  // The Log(); is a routine that adds stuff to my log memo.
  Log(\'Begin Parse\');
  while not IsLetter(ParsedName[1]) do
   begin
     Log(\'Checking Length - Length is \'+IntToStr(Length(ParsedName))+\' ...\');
     if Length(ParsedName) <> 0 then
     Begin
     Log(\'Deleting Char ...\');
     Delete(ParsedName,1,1);
     Log(\'Deleted Char ...\');
     End;
     Log(\'Checking Length - Length is now \'+IntToStr(Length(ParsedName))+\' ...\');
   end;
   // It never reaches this point!
   Log(\'End Parse\');
这是我的日志产生的结果:
21:51:19: Checking Length - Length is 2 ...
21:51:19: Deleting Char ...
21:51:19: Deleted Char ...
21:51:19: Checking Length - Length is now 1 ...
21:51:19: Checking Length - Length is 1 ...
21:51:19: Deleting Char ...
21:51:19: Deleted Char ...
21:51:19: Checking Length - Length is now 0 ...
21:51:19: Access violation at address 007A1C09 in module \'Project1.exe\'. Read of address 00000000 
如您所见,它在所有字符被删除后立即发生。我认为问题出在某种程度上,我正在尝试访问不存在的内容,但是我如何做到这一点,我看不到。 编辑:是的,我知道这是一个愚蠢的问题,所有这些东西-我只是监督了一些事情。别告诉我,你从来没有发生过;)     
已邀请:
这个问题与
Delete
无关。即使您告诉它删除不存在的字符,删除也可以。 线
while not IsLetter(ParsedName[1]) do
尝试访问
ParsedName[1]
,因此此字符最好存在。您的代码并不是特别漂亮,但是一个简单的解决方法是
while (length(ParsedName) > 0) and not IsLetter(ParsedName[1]) do
你可以做
while (length(ParsedName) > 0) and not IsLetter(ParsedName[1]) do
  Delete(ParsedName, 1, 1);
    
您还需要在While测试中添加检查字符串的长度> 0的信息。 您正在检查if语句之前检查它是否为数字,以检查字符串的长度。或者,您可以将对字符串长度的检查移到“删除字符”之后。但是你想做:)     

要回复问题请先登录注册