dongmu1951
dongmu1951
2018-12-13 20:50
浏览 61
已采纳

为什么将ReadString()操作的结果切片会导致奇怪的输出?

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Printf("Input: ")
    input, _ := reader.ReadString('
')

    fmt.Println("thing
"[:5] + "\"")
    fmt.Println(input[:len(input)-1] + "\"")

    return
}

Running the code:

Input: thing
thing"
"hing

Why does the second concatenation behave oddly? It should produce identical results, assuming the ReadString() operation returns a string with a newline at the end. Please explain what is going on here.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drb0901500211
    drb0901500211 2018-12-13 21:02
    已采纳

    That's because you're presumably on windows.

    The actual input you make from your keyboard is not thing but thing

    So when you do fmt.Println(input[:len(input)-1] + "\"") it only truncates the latest and leaves .

    So the terminal prints thing, then reaches that returns carriage to the beginning of the string, then you print a double quote. But the carriage is in the first position now, and it effectively overwrites the first character of the line, leaving you with "hing

    点赞 评论

相关推荐