pascal中的长字符串
我希望能够使用相当长的字符串(不超过100000个符号)。 据我所知,一个典型的字符串变量最多只能包含256个字符。 有没有办法存储这么长的字符串?您可以使用。旧式(Turbo Pascal,或Delphi 1)字符串,现在称为pascal中的长字符串,pascal,freepascal,Pascal,Freepascal,我希望能够使用相当长的字符串(不超过100000个符号)。 据我所知,一个典型的字符串变量最多只能包含256个字符。 有没有办法存储这么长的字符串?您可以使用。旧式(Turbo Pascal,或Delphi 1)字符串,现在称为ShortString,限制为255个字符(为字符串长度保留了字节0)。这似乎仍然是FreePascal中的默认设置(根据@MarcovandeVoort下面的评论)。但是,请继续阅读,直到您进入下面的ansisting讨论和代码示例为止。:-) 目前,我知道Pascal
ShortString
,限制为255个字符(为字符串长度保留了字节0)。这似乎仍然是FreePascal中的默认设置(根据@MarcovandeVoort下面的评论)。但是,请继续阅读,直到您进入下面的ansisting
讨论和代码示例为止。:-)
目前,我知道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
(如果使用{$H+}
编译器指令,可以将其设置为默认的string
键入FreePascal,谢谢@MarcovandeVoort):
最后,如果您出于未知原因想要使用限制为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时,您不必担心这一点。您只需要将指令{$H+}插入源代码的开头
{$H+}
var s: String;
begin
s := StringOfChar('X', 1000);
writeln(s);
end.
当然,您可能需要使用
{$modeobjfpc}
和{$coperators}
fpc和objfpc默认为短字符串。(但是可以通过{$H+}使用ansistring,Lazarus模板通常会这样做)。Trunk版本支持$mode delphiunicode,其中string=unicodestring,但到目前为止,只有system和sysutils的文件I/O例程进行了修改。@MarcovandeVoort:我已编辑以包含该信息。谢谢你让我知道;我已经有一段时间没有使用FPC了,我认为它们在默认情况下仍然更接近Delphi。如果启用Delphi模式((每个)源代码中的模式Delphi或cmdline上的-Sd,第一个通常隐藏在大型开源软件包的central.inc文件中)。但是默认的模式是模式fpc,这是一种经过清理的Turbo Pascal方言(没有16位比特码),带有一些Delphi的程序扩展。模式objfpc添加了类和大多数其他旧的Delphi特性,但有一些FPC特有的怪癖。
{$H+}
var s: String;
begin
s := StringOfChar('X', 1000);
writeln(s);
end.