我可以在pascal中定义自己的字符串类型吗?

问题描述

我读过我不能真正在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;