Lua:io.read()无法处理长字符串

3
以下命令在长度约为2000个字符的字符串上冻结:
lua -e 'print(io.read())'

有什么想法吗?
PS:Lua版本为5.1.5
2个回答

4

这很可能是底层操作系统终端IO的限制,它会在达到Lua限制之前强制执行。

可以尝试在 cat > /dev/null中输入一行较长的内容。


你说得完全正确:输入就像我的lua脚本一样冻结了。非常感谢! - Dr. Christian Müller

2
当没有参数传入时,io.read 会使用默认格式 "*l",它会读取下一行。底层缓冲区大小是C的BUFSIZ,看起来你的输入字符串已经超过了这个限制。
将其更改为io.read("*a") 可以读取整个输入。记得在最后发送EOF

谢谢!我尝试了这个,但不幸的是它仍然会冻结。我还意识到,该命令仅在没有任何空格的字符串上冻结。随机文本可以完美运行。 - Dr. Christian Müller
例如,当我尝试输入此字符串时,lua 从未给出任何响应:https://gist.github.com/anonymous/7021941 - Dr. Christian Müller
1
@ChristianMüller 我在我的电脑和http://www.compileonline.com/execute_lua_online.php上测试了你的示例字符串,两者都可以正常工作。我猜这里可能有一些隐藏的奥秘。 - Yu Hao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接