[英]Why does my C program print new blank lines when I try to print a string in the reverse order?
[英]Why my small C program print different string with cat utility?
#include <string.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
char a[6] = "abcdd";
char b[5] = "1234";
strcpy(a, b);
write(1, a, 4);
printf("AA\n");
write(1, b, 4);
printf("CC\n");
}
我正在研究strcpy func。
与./a.out
1234AA
1234CC
与./a.out | 猫 -e
12341234AA$
CC$
我读过人猫。 找不到这个。
编译后还能进行哪些更改?
发生了什么? 我缺少什么概念?
这是一个缓冲问题。
write
调用直接写入标准 output 文件描述符。 这些写入是无缓冲的。
printf
function 写入stdout
,在正常情况下(当stdout
连接到终端时)是行缓冲的(输出实际上写在换行符上)。
但是当stdout
没有连接到终端时,例如当你 pipe 和 output 时,缓冲方案就会改变。 它变得完全缓冲。 这意味着缓冲区只会在显式刷新(或缓冲区变满)时写入,这发生在程序退出时。
因此,将首先写入来自write
的无缓冲 output。 然后当程序退出时, stdout
缓冲区将被写入。
如果您在两种情况下都想要相同的行为,您可以自己显式刷新stdout
缓冲区:
write(STDOUT_FILENO, a, 4);
printf("AA\n");
fflush(stdout);
[请注意,我将“幻数” 1
更改为 POSIX 预定义符号STDOUT_FILENO
,即使快速浏览代码通常也更容易理解。]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.