如何增加控制台应用程序中readln
函数所接受的字符数?
目前该函数只允许最多输入254个字符。
在Delphi中复现:
文件 > 新建 > 其他 > 控制台应用程序,然后按照以下代码更改:
program Project3;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
var MyTest : String;
begin
try
readln(MyTest);
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
将此字符串粘贴到运行的应用程序中(这是一个300个字符的字符串)
ABCDEFHIL1ABCDEFHIL2ABCDEFHIL3ABCDEFHIL4ABCDEFHIL5ABCDEFHIL6ABCDEFHIL7ABCDEFHIL8ABCDEFHIL9ABCDEFHI10ABCDEFHI11ABCDEFHI12ABCDEFHI13ABCDEFHI14ABCDEFHI15ABCDEFHI16ABCDEFHI17ABCDEFHI18ABCDEFHI19ABCDEFHI20ABCDEFHI21ABCDEFHI22ABCDEFHI23ABCDEFHI24ABCDEFHI25ABCDEFHI26ABCDEFHI27ABCDEFHI28ABCDEFHI29ABCDEFHI30
对我来说,它将字符串截断为254个字符
ABCDEFHIL1ABCDEFHIL2ABCDEFHIL3ABCDEFHIL4ABCDEFHIL5ABCDEFHIL6ABCDEFHIL7ABCDEFHIL8ABCDEFHIL9ABCDEFHI10ABCDEFHI11ABCDEFHI12ABCDEFHI13ABCDEFHI14ABCDEFHI15ABCDEFHI16ABCDEFHI17ABCDEFHI18ABCDEFHI19ABCDEFHI20ABCDEFHI21ABCDEFHI22ABCDEFHI23ABCDEFHI24ABCDEFHI25ABCD
ReadLn()
运行读取循环直到遇到裸LF,CRLF或CR + EOF以停止读取。即使是C#的Console.ReadLine()
默认情况下也以254个字符为最大值,除非您手动增加缓冲区大小。 - Remy LebeauConsole.ReadLine()
重定向到从附加到 STDIN 的用户定义流中读取,并使用自定义缓冲区进行读取。在 Win32 API 方面,这基本上相当于调用GetStdHandle(STD_INPUT_HANDLE)
然后在其上调用ReadFile()
(顺便说一句,这确实有效,我刚刚测试了它并成功读取了全部 300 个字符)。例如,您可以使用THandleStream
和TStreamReader
进行包装。 - Remy Lebeau