常量表达式违反了子范围边界

时间:2012-12-21 12:14:37

标签: pascal

我有一个项目,我将重写为另一种语言,为了做到这一点 - 我想建立它。但是当我尝试构建它时,我收到“E1012:常量表达式违反了子范围”。

我有这样的代码:

var ForTolkResult : array[0..2000] of char;

    ForTolkResult[sizeof(ForTolkResult)-1] := chr(0); // Occurs here

从我的观点来看,这里的一切都是正确的,sizeof(ForTolkResult) = 2000 * 1,所以sizeof(ForTolkResult) - 1 = 1999,就是数组的边界。 (但我是Pascal的新手)所以这里有什么不对?

我正在尝试通过Embarcadero C ++ Builder构建它。如果此错误是编译器中的错误,我该如何关闭此检查?

1 个答案:

答案 0 :(得分:1)

char真的只占用了一个字节的内存吗?我的意思是,检查它是否是“Ansi”单字节字符而不是WideChar。

无论如何,当您需要访问数组的最后一个索引时,最好使用

ForTolkResult[High(ForTolkResult)] := chr(0);