gpt4 book ai didi

delphi - 在字符串中复制字符,留下空字符串

转载 作者:行者123 更新时间:2023-12-03 03:45:32 25 4
gpt4 key购买 nike

我有一个非常简单的代码,女巫给我留下了一个空字符串。正如您所看到的,它只是复制“FileDir”字符串中的每个“\”。当我调用“Showmessage(FileDir)”时,我得到一个空框。但是,当我在循环中调用“Showmessage(FileDir[I])”时,我确实得到了该字符。

var
s, FileDir: string;
I: integer;

for I := 0 to FileDir.Length do
begin
if FileDir[I] = '\' then
s := s + '\';
s := s + FileDir[i];
end;
FileDir := s;
Showmessage(FileDir);

我已经编辑了代码,将字符串放入编辑框中,然后将其复制到我的“FileDir”字符串中。这可行,但我不满意

for I := 0 to FileDir.Length do
begin
if FileDir[I] = '\' then
edbox.Text := edbox.Text + '\';
edbox.Text := edbox.Text + FileDir[i];
end;
FileDir := edbox.Text;
Showmessage(FileDir);

很可能我没有看到显而易见的事情,所以也许你们中的一个人看到了。提前致谢

最佳答案

for I := 0 to FileDir.Length do

在这里,您迭代了 FileDir.Length+1 个字符,这显然不是您的意图。如果您使用从零开始的字符串,则循环应该是

for I := 0 to FileDir.Length-1 do

或者,如果你的字符串是基于一个的,那么它应该是

for I := 1 to FileDir.Length do

When I call 'Showmessage(FileDir)', I get an empty box.

这似乎表明越界访问是当您访问索引为零的元素时,因此您的字符串似乎是传统的基于 1 的字符串。

<小时/>

这个故事的真正寓意是您需要在编译器选项中启用范围检查。一旦执行此操作,编译器将发出诊断代码,每当您执行越界数组访问时,该代码都会抛出信息丰富的运行时错误。

<小时/>

您的代码可以全部替换为

FileDir := StringReplace(FileDir, '\', '\\', rfReplaceAll);

关于delphi - 在字符串中复制字符,留下空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com