Jef*_*eff 3 delphi string char access-violation
我试图从字符串的开头删除每个字符,这不是字母字符.
但是,如果字符串中只有非字母字符(如"!!"或"?!?"),则会发出访问冲突!
这是我的代码:
// 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');
Run Code Online (Sandbox Code Playgroud)
这是我的日志产生的:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,它在所有字符被删除后立即发生.我认为问题在于,不知怎的,我试图访问不存在的东西,但我是如何做到的,我看不到.
编辑:是的,我知道这是一个愚蠢的问题和所有的东西 - 我只是监督一些事情.不要告诉我,不要发生在你身上;)
And*_*and 13
这个问题与此无关Delete.即使您告诉它删除不存在的字符,删除仍然有效.
这条线
while not IsLetter(ParsedName[1]) do
Run Code Online (Sandbox Code Playgroud)
试图访问ParsedName[1],所以这个角色最好存在.你的代码不是特别漂亮,但一个简单的解决方法是
while (length(ParsedName) > 0) and not IsLetter(ParsedName[1]) do
Run Code Online (Sandbox Code Playgroud)
你可以做到
while (length(ParsedName) > 0) and not IsLetter(ParsedName[1]) do
Delete(ParsedName, 1, 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |