【发布时间】:2018-07-24 10:52:51
【问题描述】:
是否可以增加控制台应用程序接受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
【问题讨论】:
-
我在 XE5 和 Tokyo 10.2.2 测试过
-
这是控制台窗口本身的限制,而不是 RTL。
ReadLn()运行一个读取循环,直到遇到一个bare-LF、CRLF 或CR+EOF 以停止读取。甚至 C# 的Console.ReadLine()默认情况下最多为 254 个字符,除非您手动增加缓冲区大小。 -
我在想如果 Visual Studio C# 可以解决这个问题,delphi 一定有办法stackoverflow.com/questions/5557889/console-readline-max-length
-
该 C# 方法正在重定向
Console.ReadLine()以从附加到 STDIN 并使用自定义缓冲区读取的用户定义流中读取。在 Win32 API 术语中,这基本上就像调用GetStdHandle(STD_INPUT_HANDLE)然后在其上调用ReadFile()(这确实有效,顺便说一句,我刚刚对其进行了测试,它可以很好地读取整个 300 个字符)。例如,您可以使用THandleStream和TStreamReader来包装它。
标签: delphi console-application