一次\r引发的输出异常

这个bug好玩啊

这个小伙伴

只是把一个base64做了一个解码

然后呢

打印他的解码后的长度和内容

我们来看一下啊

打开长度是

内容就这么几个字符

就是很奇怪

而且大家发现了吗

前面这几个汉字都没有了

然后我们调试一下

打开这个字符串的内容

大家看这是没有问题的

只是呢注意看啊

我们这么看它是有\r的

所以呢我就怀疑跟这\r有关系

我们复制一下哈

然后呢终止一下

我们直接呀写一个字符串

注意它自动换成杠n了

我们换成杠r

好我们试一下

大家看跟刚才的情况是一样的

那为什么会这样呢

有的人说\r不就是回车吗

是的\r确实是回车

但是呢他不是换行

我们打开一个控台看一下

我们直接echo一个带\r的内容

正常linux的话

我们需要加一个"-e"啊

mac系统不用

我们就:a

然后呢:\rb

注意大家看!它打印的是b

那这时候如果打两个a呢

大家看打印的是b a

那如果打印3个a呢

大家看就是baa了

那为什么会这样呢

我们来看这word哈

现在呢我已经输出了aaa了

也就说aaa

现在呢我要输出杠r

那杠r是回车

到底是什么呢

就是他要回到这一行的最前面

就是把光标啊挪到最前面这个位置

然后这个时候再输入新的字符

它就会替换原来的字符

像这样b

所以它就变成了b a a

那我用word演示呢

也是因为word它自身有这个功能哈

我已经开启了这个改写模式

在Windows里边呢

(大家可以直接按那个insert键来切换)

所以我们再回到这个问题上

它打印完这个\r之后

又回到第一行(口误:这一行)的第一个位置

重新打印这些内容

所以就被覆盖了

只是idea和控制台(口误:终端)它有一点不同

也就是说同样的这个程序

如果我们在控制台(口误:终端)里打印

大家看啊

我去直接执行这个Test文件

我们:java Test

大家看

它会打印这个分号后边还有的内容

也就是说如果最后一行的内容它比较短

那么在终端里

它后边的字母串它还存在

没有被替换掉

但是如果我们在idea的终端(控制台)里边

只要输入了

那么前面的内容都会被清空了

它重新的输入这一行

最后更新于