0

我有以下代码:

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

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

在此处输入图像描述

即使是法语,我相信你明白了......

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

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

4

2 回答 2

3

麻烦的代码很可能是这个

FillChar(wSpaces,cSpacesAfter,' ');

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

所以这段代码所做的就是用 4 个空格字符覆盖持有该指针的变量,然后在变量后面的任何内容的顶部再写 1031 个空格。简而言之,您将完全破坏您的记忆。这可以解释为什么FillChar工作,但下一行代码会痛苦而戏剧性地死去。

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

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

但是,如果写起来可能更惯用:

wSpaces := StringOfChar(' ', cSpacesAfter);
于 2011-05-09T13:19:21.270 回答
1

FillChar程序用相同的字节或字符FillValue FillCount次填充一段存储Buffer 。

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

您确定 wSpaces 的大小足以容纳所有 cSpaces 在您写入之后吗?

于 2011-05-09T13:12:54.640 回答