我可以在 Pascal 中定义自己的字符串类型吗?
Can i define my own string type in pascal?
我读过我不能在 Pascal 中真正动态地分配一个数组,但我也在考虑实现一个字符串结构。
在 C 中,我将通过创建一个 struct
来解决它,其中包含一个指向字符数组(包含字符)、一个长度整数和一个大小的指针。然后,当需要调整大小时,我会 malloc
char *
和 realloc
它。
typedef struct {
size_t size;
size_t length;
char* contents;
} String;
这可以在 (ISO) pascal 中完成吗?如果是这样,一个人会怎么做呢?我不想使用内置的 pascal 动态数组,因为它有点违背了制作我自己的字符串类型的目的。
从评论来看,ISO pascal(标准版和扩展版)似乎不支持此类内容。那我怎么用 free 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;
我读过我不能在 Pascal 中真正动态地分配一个数组,但我也在考虑实现一个字符串结构。
在 C 中,我将通过创建一个 struct
来解决它,其中包含一个指向字符数组(包含字符)、一个长度整数和一个大小的指针。然后,当需要调整大小时,我会 malloc
char *
和 realloc
它。
typedef struct {
size_t size;
size_t length;
char* contents;
} String;
这可以在 (ISO) pascal 中完成吗?如果是这样,一个人会怎么做呢?我不想使用内置的 pascal 动态数组,因为它有点违背了制作我自己的字符串类型的目的。
从评论来看,ISO pascal(标准版和扩展版)似乎不支持此类内容。那我怎么用 free 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;