为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
幕布斯7119047 2023-05-15 15:23:08
package mainimport (    "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: thingthing""hing为什么第二个连接的行为很奇怪?它应该产生相同的结果,假设 ReadString() 操作返回一个末尾有换行符的字符串。请解释这里发生了什么。
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

那是因为你大概在 Windows 上。

您从键盘进行的实际输入不是thing\n但是thing\r\n

所以当你这样做时,fmt.Println(input[:len(input)-1] + "\"")它只会截断最新的\n并离开\r

所以终端打印thing,然后到达\r将回车符返回到字符串的开头,然后打印双引号。但是马车现在在第一个位置,它有效地覆盖了该行的第一个字符,留给你"hing


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信