2012-11-30 32 views
5

我想在0处做一个简单的字符串访问,出于某种原因,我在Borland Builder 5 C++中出现了一个超出界限的错误。Borland Builder 5 C++字符串不能索引在0

有没有人找到解决办法? Borland编译器使用的字符串是否有特殊类型?

+0

是的。它们基于1,因为C++ Builder和Delphi共享通用类型。 (C++ Builder中的VCL是由Delphi的编译器编写和编译的。)因此,如果由于某种原因必须有基于0的索引,那么使用基于1的索引或将它们转换为C++兼容的字符串。 –

+0

有趣的是,在所有的AnsiString方法中处理索引0是不相等的。例如,在BCB5中,如果给它一个小于1的索引,'SubString()'将返回一个空字符串,并且不会引发错误。但是在BCB6及更高版本中,小于1的索引将静默映射到索引1。 –

+0

@雷米,这很奇怪。我发表了一条评论,而不是一个答案,因为我知道你会看到这个问题,并可以比我更好地回答它;我很少使用Builder。 :-) –

回答

4

是的,它是Borland C++ Builder使用的特殊字符串类型。 这种类型的变量索引自1.

我知道这可能有点令人困惑 - 我也很难相信它很长一段时间。