Delphi - ADO查询和FillChar生成错误

时间:2011-05-09 12:54:14

标签: string delphi delphi-7 tadoquery

我有以下代码:

var wqry:TAdoQuery;
...
  FillChar(wSpaces,cSpacesAfter,' ');
  try
    wqry := TADOQuery.Create(nil);//here the error
    wqry.Connection:=...

cSpacesAfter是一个常量,其值为1035. wSpaces是一个本地字符串变量。问题是我在创建TAdoQuery时收到以下错误

enter image description here

即使是法语,我相信你有这个想法......

如果我评论FillChar代码,一切正常。我有通常的编译器指令,没什么特别的。我正在使用Delphi 7。

有人可以告诉我该代码有什么问题吗?

2 个答案:

答案 0 :(得分:3)

麻烦的代码很可能就是这个

FillChar(wSpaces,cSpacesAfter,' ');

我假设wSpaces是字符串类型。实际上,字符串变量只不过是指向保存字符串的数据结构的指针。您不需要使用指针语法,因为编译器会为您处理。

所以这段代码的作用是覆盖保存带有4个空格字符的指针的变量,然后在变量后面的任何内容上写入1031个空格。简而言之,你将完全破坏你的记忆。这可以解释为什么FillChar有效但下一行代码会导致痛苦和戏剧性的死亡。

如果你的字符串确实有1035个字符的空间,你可以改写:

FillChar(wSpaces[1], cSpacesAfter, ' ');

然而,如果写作可能更惯用:

wSpaces := StringOfChar(' ', cSpacesAfter);

答案 1 :(得分:1)

  

FillChar 过程使用相同的字节或字符 FillValue FillCount 次数填充存储缓冲区的一部分。

     

它主要用于初始化数字数组。它可用于初始化记录和字符串,但应注意避免覆盖长度字段。 StringOfChar 最适合将字符串填充到同一个字符中。

你确定wSpaces的大小足以容纳所有cSpaces吗?写完之后?