Go 为什么切片ReadString()操作的结果会导致奇怪的输出?
运行代码:Go 为什么切片ReadString()操作的结果会导致奇怪的输出?,go,concatenation,Go,Concatenation,运行代码: 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(
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
}
为什么第二个连接行为异常?假设ReadString()操作返回一个末尾有换行符的字符串,它应该会产生相同的结果。请解释一下这里发生了什么。那是因为你大概在windows上 您从键盘进行的实际输入不是
thing\n
,而是thing\r\n
因此,当您执行fmt.Println(输入[:len(输入)-1]+“\”)
时,它只截断最新的\n
并保留\r
因此,终端打印
东西
,然后到达\r
,将回车返回字符串开头,然后打印双引号。但是回车现在位于第一个位置,它实际上覆盖了行的第一个字符,留给您的是“hing
您在windows上吗?不可复制linux@zerkms我在窗户上。你的回答解决了我的问题。
Input: thing
thing"
"hing