2012-12-21 43 views
1

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

我有这样的代码:

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

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

从我的观点一切的观点是正确的在这里,sizeof(ForTolkResult) = 2000 * 1,所以sizeof(ForTolkResult) - 1 = 1999,这是一个数组的边界。 (但我是帕斯卡新手)所以这里有什么问题?

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

+0

'VAR ForTolkResult:数组[0..2000]焦炭;' 通过这个数组的方式有2001元素 –

+0

好吧,如果包含2000 - 仍然适用相同的逻辑。 sizeof(F) - 1 = 2000这是在数组的边界 – Archeg

回答

1

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

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

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

我在帕斯卡不太方便,但我唯一需要的是能够运行它。将sizeof更改为High帮助,谢谢!它仍然没有建立,所以我会尽力解决开发人员的问题。谢谢! – Archeg