#include<stdio.h>
int main()
{
printf ("Hello\r");
}
在GCC编译器中,当执行此代码时,它不打印任何内容.如果我将\n
加到类似于print语句中
printf ("Hello\r\n");
它可以打印Hello
个.为什么会是这样呢?输出缓冲区中发生了什么?
#include<stdio.h>
int main()
{
printf ("Hello\r");
}
在GCC编译器中,当执行此代码时,它不打印任何内容.如果我将\n
加到类似于print语句中
printf ("Hello\r\n");
它可以打印Hello
个.为什么会是这样呢?输出缓冲区中发生了什么?
\r
是回车符,而\n
字符是换行符.
carriage return将光标移回行首. 这一术语可以追溯到 typewriter ,在那里举行辊和纸张的滑架移动所有的方式到右边. 其结果是,任何后续字符都将从行的开头开始打印在任何先前字符之上.
line feed将光标向下移动一行. 这个术语也可以追溯到 typewriter ,在 typewriter 中,滚筒向下移动一行.
这些字符的解释方式因操作系统或终端模拟器的不同而有所不同.在您的例子中,打印了"Hello",打印了\r
个字符,将光标移回同一行的开始处,然后程序退出,shell 程序在"Hello"上打印提示符.
如果您要打印一个比您的shell 提示符长的字符串,那么您将看到额外的字符.例如,如果我将printf
呼叫更改为:
printf ("Helloxxxxxxxxxxyyyyy111112222333344445555\r");
当我运行你的程序时,我得到的信息是:
[dbush@db-centos7 ~]$ ./x1
[dbush@db-centos7 ~]$ 1112222333344445555
相反,当您打印\n
时,光标移动到下一行and到该行的开头.