read( ),readln( ),writeln() ,write( )有啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了read( ),readln( ),writeln() ,write( )有啥区别?相关的知识,希望对你有一定的参考价值。
偶学object pascal,语法中用到了以上几个函数,不知道它们有什么区别喃?望大虾指点!
read()指从标准输入流(一般是键盘咯)读取一个字符,并作为函数的返回指,如果没从键盘输入更多的字符,则为-1,可以简单的理解为从键盘输入字符readln()的功能与read()相同,只是它能换行,即它读取的是一行的字符
write()是输入字符,既从屏幕显示
writeln()是显示一行的字符,即相当于换行的功能
关于它们之间的具体差别,你可以亲自上机操作,可能会更容易理解!!! 参考技术A read()和write()就是不换行输入和输出
另外两个就是要换行的哈~都用的比较多~根据需要来选择~
呵呵~就这样 参考技术B 在WRITE和READ后面加了-LN就会自动换行
例如:
WRITE("1");
WRITE("2");
输出: 12
WRITELN("1");
WRITELN("2");
输出:
1
2 参考技术C read( )自动换行
write( )
readln( ) 不换行
writeln()
Indy WriteLn 和 ReadLn 字符串的最大长度是多少?
【中文标题】Indy WriteLn 和 ReadLn 字符串的最大长度是多少?【英文标题】:What is Indy WriteLn and ReadLn string max length? 【发布时间】:2022-01-19 13:24:14 【问题描述】:使用 Indy 方法 WriteLn
和 ReadLn
发送和读取的字符串长度是否有限制?
【问题讨论】:
【参考方案1】:TIdIOHandler.WriteLn()
仅受可用内存限制。但是,请注意,它将EOL
(#13#10
) 附加到输入字符串的末尾,生成一个作为原始副本的新字符串,然后将该副本转换为TIdBytes
以进行发送。因此,将使用更多的内存,而不仅仅是您传入的内存。我相信这在未来可以得到更好的优化。
TIdIOHandler.ReadLn()
有一个可选的AMaxLineLength
参数,默认设置为-1
。如果设置为< 0
,则将使用TIdIOHandler.MaxLineLength
属性,默认设置为16384
字节。如果需要,您可以将(A)MaxLineLength
设置得更高,或者您甚至可以将其设置为0
以完全禁用限制。如果(A)MaxLineLength
设置为> 0
并且传入的数据超过该限制,则后续行为取决于TIdIOHandler.MaxLineAction
属性:
maException
(默认值):引发EIdReadLnMaxLineLengthExceeded
,接收到的字节将保留在TIdIOHandler.InputBuffer
中以供后续读取。
maSplit
:精确的(A)MaxLineLength
字节数将从TIdIOHandler.InputBuffer
中提取并作为String
返回,TIdIOHander.ReadLnSplit
属性将设置为True
。剩余字节将保留在TIdIOHandler.InputBuffer
中以供后续读取。
【讨论】:
感谢您准确详细的回复。我还有一个问题,不知道要不要再开个帖子:TCPClient->IOHandler->MaxLineLength = 0;
和TCPClient->Socket->MaxLineLength = 0;
有什么区别?我的意思是:使用Socket
和IOHandler
之间的区别。看来我可以在同一个地方以同样的方式使用两者。
@user3680100 "[IOHandler] 和 [Socket] 有什么区别?" - 当IOHandler
被分配一个TIdIOHandlerSocket
派生对象时,@987654352 @ 设置为同一个对象,否则设置为nil
。所以Socket
只是一个快捷方式,可以避免在需要访问特定于套接字的功能时必须对IOHandler
进行类型转换。
当我设置TCPClient->IOHandler->MaxLineLength = 0;
或TCPClient->Socket->MaxLineLength = 0;
我得到错误Project CMRemoteViewer.exe raised exception class $C0000005 with message 'access violation at 0x0041b484: write of address 0x000000b8'.
对不起.....我搞砸了 cmets....不知道要删除什么而不造成其他损害...我道歉
我发现错误:设置属性MaxLineLength
时TCPClient未连接以上是关于read( ),readln( ),writeln() ,write( )有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Delphi XE8报错:There is no overloaded version of 'ReadLn' that can be called with these argume