2017-07-13 10 views
3

Golangの文字列を読むにはfmt.Scanfを使用しています。しかし、大きな入力(> 1024文字)を渡すとコマンドが停止します。 Goバージョンgo1.8.3 darwin/amd64を使用しています。Goで1,024文字以上の入力を読み取ることができません

はここでここでは、コード

package main 

import "fmt" 

func main() { 
    var s string 
    fmt.Scanf("%s", &s) 
    fmt.Println(s) 
} 

あるhttps://pastebin.com/raw/fJ4QAZUZ

Goは文字の1024数をマークし、そのペイロードにJyまでの入力を取るように見える失敗したペイロードがあります。だから、1024が限界か何ですか?

PS - 私は既にそのリンクでコード化されたクッキーを改ざんしていたので、心配はありません。

+0

私には大丈夫ですか? https://play.golang.org/p/TaY_XLapeY –

+1

私は、プレイグランドが通常通りに 'Scanf'コマンドを実行するとは思わない。それは私が思うにスキップされます。この例では、大きなテキストを 's'に割り当てて印刷するだけなので、それは違うのです。 – Avi

答えて

6

それはfmtパッケージまたはfmt.Scanf()の制限はありませんが、この例では、適切に3キロバイト以上をスキャン:

// src is a looooong text (>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)。

+0

@iczaありがとうございます。これは正解と思われる。 – Avi

関連する問題