程序的执行顺序
问题描述:
我有关于执行下列程序的问题。程序的执行顺序
#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函数的缓冲区有关?
答
stdout是行缓冲的。当您打印\n
或退出应用程序时,会发生实际打印输出。
用途:
printf("%s %s\n",p,p1);
或者:
fflush(stdout);
编辑:地址其他问题...
printf("\n%p",p);
这将打印换行第一然后地址。
printf("%s %s",p,p1);
这会打印一个空字符串(因为p指向0终止符)一个空格和原始字符串。
当循环完成后,您打印了最后一个地址(但未刷新)。你睡了,然后你打印一个空的字符串,一个空格和原始字符串。
如果您更改了最后一个printf使用"%p %s"
它会更清楚发生了什么。
正常情况下,在找到\ n时将输出刷新到终端。在最后一次迭代中,没有\ n,所以你必须等到程序退出。 – Juancho 2011-03-04 17:47:55