Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Delphi-ADO查询和FillChar生成错误_String_Delphi_Delphi 7_Tadoquery - Fatal编程技术网

String Delphi-ADO查询和FillChar生成错误

String Delphi-ADO查询和FillChar生成错误,string,delphi,delphi-7,tadoquery,String,Delphi,Delphi 7,Tadoquery,我有以下代码: var wqry:TAdoQuery; ... FillChar(wSpaces,cSpacesAfter,' '); try wqry := TADOQuery.Create(nil);//here the error wqry.Connection:=... cSpacesAfter是一个常量,其值为1035。wspace是一个局部字符串变量。问题是我在创建TAdoQuery时收到以下错误 即使是法语,我相信你也有这个想法 如果我对FillChar

我有以下代码:

var wqry:TAdoQuery;
...
  FillChar(wSpaces,cSpacesAfter,' ');
  try
    wqry := TADOQuery.Create(nil);//here the error
    wqry.Connection:=...
cSpacesAfter是一个常量,其值为1035。wspace是一个局部字符串变量。问题是我在创建TAdoQuery时收到以下错误

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

如果我对FillChar代码进行注释,一切正常。我有通常的编译器指令,没有什么特别的。我用的是Delphi7

有人能告诉我那个代码有什么问题吗

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

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

您确定WSpace的大小足以容纳您写入后的所有CSpaceSaf吗

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

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


您确定wspace的大小足以容纳您写入后的所有cspacesaf吗?

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

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

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

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

FillChar(wSpaces[1], cSpacesAfter, ' ');
然而,if可能更惯用:

wSpaces := StringOfChar(' ', cSpacesAfter);

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

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

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

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

FillChar(wSpaces[1], cSpacesAfter, ' ');
然而,if可能更惯用:

wSpaces := StringOfChar(' ', cSpacesAfter);

如果这是复制粘贴的代码,则您正在初始化
wqry
,但使用
wry
。请注意第二个名称中缺少的
q
。如果不是复制粘贴的代码,请修复它(通过复制粘贴代码)wspace:=stringofchar(“”,cSpacesAfter);-解决了这个问题。没有出现错误。感谢您提供了-1。事实上,这是一个愚蠢的问题,睡眠不足成了问题的关键。如果这是复制粘贴的代码,那么您正在初始化
wqry
,但使用
wry
。请注意第二个名称中缺少的
q
。如果不是复制粘贴的代码,请修复它(通过复制粘贴代码)wspace:=stringofchar(“”,cSpacesAfter);-解决了这个问题。没有出现错误。感谢您提供了-1。事实上,这是一个愚蠢的问题,睡眠不足成了问题的关键;在FillChar函数之前,仍然会生成错误;FillChar(wspace[1],cSpacesAfter',)根据我的回答,但是
StringOfChar
要好得多;在FillChar函数之前,仍然会生成错误;FillChar(wspace[1],cSpacesAfter',)根据我的回答,但是
StringOfChar
要好得多。是的,wspace是一个局部字符串变量。FillChar(wspace[1],cSpacesAfter',);-生成000000。。AV。@RBA只有在您不首先分配一些存储的情况下,它才会生成AV!无论如何,正如您在上面的评论中所说,StringOfChar是您的答案。是的,WSpace是一个局部字符串变量。FillChar(wspace[1],cSpacesAfter',);-生成000000。。AV。@RBA只有在您不首先分配一些存储的情况下,它才会生成AV!无论如何,正如你在上面的评论中所说,StringOfChar是你的答案。