在我添加Fillchar()
在pascal中查找C的memset()
等效项后,程序会给出运行时错误216.
这是我的代码(如果我删除FillChar()它可以正常工作):
function NewFoo(name : string) : ptrfoo;
var sym : ptrfoo;
begin
new(sym);
FillChar(sym, SizeOf(foo), #0);
sym^.name := name;
NewFoo := sym;
end;
foo
是record
,fooptr
指向它的指针type fooptr = ^foo;
。
我该如何解决这个问题?
答案 0 :(得分:4)
Fillchar
采用无类型参数,而不是指针。因为它是用零覆盖指针本身(以及超出它的内存)。您希望取消引用指针以将其与Fillchar
:
FillChar(sym^, SizeOf(foo), #0);
无类型参数是const foo
,var foo
,out foo
形式的参数,似乎没有附加类型。它们不能直接分配或使用,但您可以取消引用它们并获取指向它们的指针。基本上,它们是语法糖,能够传递记录和其他变量,就好像它们是数据blob而不必从调用端指向它们的C风格(实际上它有点复杂,但那是它的要点)。