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()操作返回一个以换行符结尾的字符串,它应该产生相同的结果。请解释这里发生了什么。

最佳答案

那是因为您大概在Windows上。

您从键盘上实际输入的不是thing\n,而是thing\r\n
因此,当您执行fmt.Println(input[:len(input)-1] + "\"")时,它只会截断最新的\n并保留\r

因此,终端打印thing,然后到达\r,该结果将回车返回到字符串的开头,然后打印双引号。但是笔架现在处于第一个位置,它有效地覆盖了该行的第一个字符,剩下"hing

关于go - 为什么将ReadString()操作的结果 slice 会导致奇怪的输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53769855/

10-16 06:59