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/