英文:
Not able to read input larger than 1024 characters in Go
问题
我正在使用fmt.Scanf
来读取Golang中的字符串输入。但是当我们传入一个大的输入(>1024个字符)时,命令会停止运行。我正在使用Go版本go1.8.3 darwin/amd64
。
以下是代码:
package main
import "fmt"
func main() {
var s string
fmt.Scanf("%s", &s)
fmt.Println(s)
}
以下是失败的有效负载:https://pastebin.com/raw/fJ4QAZUZ
在该有效负载中,Go似乎只接受到Jy
,这标志着1024个字符的数量。所以1024是一个限制吗?
附注:我已经篡改了该链接中的编码cookie,所以不用担心。
英文:
I am using fmt.Scanf
to read a string input in Golang. But the command stalls when we pass in a large input (>1024 characters). I am using Go version go1.8.3 darwin/amd64
.
Here is the code
package main
import "fmt"
func main() {
var s string
fmt.Scanf("%s", &s)
fmt.Println(s)
}
Here is the payload that fails https://pastebin.com/raw/fJ4QAZUZ
Go seems to take input till Jy
in that payload which marks 1024 number of characters. So is 1024 a limit or what?
PS - I had already tampered the encoded cookie at that link, so no worries.
答案1
得分: 6
这不是fmt
包或fmt.Scanf()
的限制,这个示例可以正确地扫描超过3KB的内容:
// src是一个非常长的文本(>3KB)
var s string
fmt.Println(len(src))
fmt.Sscanf(src, "%s", &s)
fmt.Println(len(s))
在Go Playground上尝试一下吧。
这很可能是你的终端的限制。我也尝试了你的未修改版本,粘贴了超过10KB的文本,结果是4096字节(Ubuntu Linux 16.04,Bash)。
英文:
It's not the limit of the fmt
package or fmt.Scanf()
, this example properly scans more than 3KB:
// src is a looooong text (>3KB)
var s string
fmt.Println(len(src))
fmt.Sscanf(src, "%s", &s)
fmt.Println(len(s))
Try it on the Go Playground
It's most likely the limit of your terminal. I also tried your unmodified version, pasted more than 10KB of text, and the result was 4096 bytes (Ubuntu linux 16.04, Bash).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论