我有一个项目,我将重写为另一种语言,为了做到这一点 - 我想建立它。但是当我尝试构建它时,我收到“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构建它。如果此错误是编译器中的错误,我该如何关闭此检查?
答案 0 :(得分:1)
char真的只占用了一个字节的内存吗?我的意思是,检查它是否是“Ansi”单字节字符而不是WideChar。
无论如何,当您需要访问数组的最后一个索引时,最好使用
ForTolkResult[High(ForTolkResult)] := chr(0);