我有关于执行以下程序的问题 .
#include<stdio.h>
int main(void)
{
char *p="hey friends",*p1;
p1=p;
while(*p!='\0')
{
p++;
printf("\n%p",p);
}
printf("%s %s",p,p1);
sleep(100);
}
当我运行以下时,它输出如下输出:
0x8048521
0x8048522
0x8048523
0x8048524
0x8048525
0x8048526
0x8048527
0x8048528
0x8048529
0x804852a
然后在100秒后打印“0x804852b嘿朋友” . 虽然声明:printf(“%s%s”,p,p1);在睡眠声明之前是为什么它在睡觉之前不打印而且它再打印一个地址意味着它再次进入循环 . 有人可以解释一下上述程序的工作原理 . 它是否与printf函数的缓冲区有关?
1 回答
stdout是行缓冲的 . 当您打印
\n
或退出应用程序时,会发生实际的打印输出 .使用:
要么:
编辑:解决其他问题......
这先打印一个换行符然后打印一个地址 .
这会打印一个空字符串(因为p指向0终止符)空格和原始字符串 .
循环完成后,您已经打印了最后一个地址(但它没有刷新) . 你睡觉了,然后打印一个空字符串,一个空格和原始字符串 .
如果您将最后一个printf更改为使用
"%p %s"
,则会发生'd be more clear what' .