在Go语言中,无法读取超过1024个字符的输入。

huangapple go评论127阅读模式
英文:

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).

huangapple
  • 本文由 发表于 2017年7月13日 23:07:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/45084622.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定