问题描述
我读过我不能真正在pascal中动态分配数组,但我也在考虑实现字符串结构。
在C语言中,我将通过创建一个struct
来解决这个问题,该指针包含一个指向字符数组的指针(包含字符),一个长度整数和一个大小为1的字符。然后,在需要调整大小时,我会malloc
char *
和realloc
。
typedef struct {
size_t size;
size_t length;
char* contents;
} String;
这可以用(ISO)帕斯卡完成吗?如果是这样,将如何处理?我不想使用内置的pascal动态数组,因为它违反了创建自己的字符串类型的目的。
从注释中看,ISO pascal(标准和扩展)似乎不支持此类内容。那我怎么在免费的帕斯卡里做呢?
解决方法
在Free Pascal中,它可以类似于上述C方法来实现:
type
TMyString = record
size: SizeUInt;
length: SizeUInt;
contents: PAnsiChar;
end;
...
procedure AllocMyString(var S: TMyString; L: SizeUInt);
begin
S.size := 0;
S.length := L;
GetMem(Pointer(S.contents),L);
end;
procedure ReallocMyString(var S: TMyString; L: SizeUInt);
begin
S.size := 0;
S.length := L;
ReAllocMem(Pointer(S.contents),L);
end;