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

package main


import (

    "bufio"

    "fmt"

    "os"

)


func main() {

    reader := bufio.NewReader(os.Stdin)


    fmt.Printf("Input: ")

    input, _ := reader.ReadString('\n')


    fmt.Println("thing\n"[:5] + "\"")

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


    return

}

运行代码:


Input: thing

thing"

"hing

为什么第二个连接的行为很奇怪?它应该产生相同的结果,假设 ReadString() 操作返回一个末尾有换行符的字符串。请解释这里发生了什么。


幕布斯7119047
浏览 96回答 1
1回答

慕丝7291255

那是因为你大概在 Windows 上。您从键盘进行的实际输入不是thing\n但是thing\r\n所以当你这样做时,fmt.Println(input[:len(input)-1] + "\"")它只会截断最新的\n并离开\r。所以终端打印thing,然后到达\r将回车符返回到字符串的开头,然后打印双引号。但是马车现在在第一个位置,它有效地覆盖了该行的第一个字符,留给你"hing
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go