pascal - 帕斯卡中的长字符串

标签 pascal freepascal

我希望能够使用一个相当长的字符串(不超过 100000 个符号)。 据我所知,典型的字符串变量最多只能包含 256 个字符。 有没有办法存储这么长的字符串?

最佳答案

旧式(Turbo Pascal 或 Delphi 1)字符串,现在称为 ShortString,限制为 255 个字符(字节 0 被保留用于字符串长度)。这似乎仍然是 FreePascal 中的默认设置(根据下面 @MarcovandeVoort 的评论)。不过,请继续阅读,直到您看到下面的 AnsiString 的讨论和代码示例。 :-)

目前,我知道的大多数其他 Pascal 方言默认为 AnsiString (单字节字符的长字符串)或 UnicodeString (多字节字符的长字符串)人物)。两者都不限制为 255 个字符。

当前版本的 Delphi 默认使用 UnicodeString 作为默认类型,因此声明 string 变量实际上是一个很长的 UnicodeString。字符串长度没有实际上限:

var
  Test: string;  // Declare a new Unicode string
begin
  SetLength(Test, 100000);   // Initialize it to hold 100000 characters
  Test := StringOfChar('X', 100000);  // Fill it with 100000 'X' characters
end;

如果你想强制使用单字节字符(但不限于255个字符串),请使用AnsiString(可以将其设置为FreePascal中默认的string类型)如果您使用 {$H+} 编译器指令 - 感谢@MarcovandeVoort):

var
  Test: AnsiString;  // Declare a new Ansistring
begin
  SetLength(Test, 100000);   // Initialize it to hold 100000 characters
  Test := StringOfChar('X', 100000);  // Fill it with 100000 'X' characters
end;

最后,如果您出于某种未知原因想要使用限制为 255 个字符的旧样式 ShortString,请这样声明,或者使用 ShortString 或旧式 String[Size] 声明:

var
  Test: ShortString;  // Declare a new short string of 255 characters
  ShortTest: String[100];  // Also a ShortString of 100 characters
begin
  // This line won't compile, because it's too large for Test
  Test := StringOfChar('X', 100000);  // Fill it with 100000 'X' characters
end;

关于pascal - 帕斯卡中的长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177412/

相关文章:

macos - 是否可以在Mac上安装Pascal编译器而不安装XCODE?

delphi - 如何将常量地址分配给pascal指针?

c++ - 在 FreePascal 中使用 C/C++ DLL

delphi - 使用FPC : Allocation and Pointers编写Scheme解释器

freepascal - 省略汇编器函数的汇编器关键字

arrays - Free Pascal 中文字数组的语法是什么?

c - 什么是适用于 OSX、Windows XP 或 DOS 的良好 C 编译器?

windows - 我们如何在delphi中获取键盘空闲时间

unicode - 在 Free Pascal 3 中什么时候可以安全地将 UnicodeString 转换为字符串?

delphi - 如何消除跟踪过程中的 header 伪影 - HDN_TRACK?