我有一个真正简单程序,但它不起作用。此外,它让我对程序的流程产生了严重怀疑。
程序是这样的(假设有必要的标题):
main(){
printf("hello1");
printf("hello2");
somefunction();
}
输出至少是特殊的:它只返回第一个printf(hello1),之后程序立即退出并出现错误“Segmentation fault 11”。 然而,如果我删除'somefunction()',则第二个printf 显示。
我的意思是,如果我的'somefunction()'出现问题,第二个printf()应该无论如何显示。
答案 0 :(得分:5)
你的somefunction
做了一些令人讨厌的事情,并且在printf
有机会刷新缓冲区之前该进程被终止。你可以尝试:
printf("hello1");
printf("hello2");
fflush(stdout);
somefunction();
答案 1 :(得分:2)
stdout是行缓冲的。这意味着您的输出缓存在某个地方以便稍后打印,但由于您somefunction
崩溃,因此无法打印它们。
您可以使用fflush
:
fflush(stdout);
或者,打印一个新行:
main(){
printf("hello1\n");
printf("hello2\n");
somefunction();
}
答案 2 :(得分:0)
一般情况下,除非您确切知道自己在做什么,否则应始终在打印语句的末尾添加\n
。这将确保语句实际上使其成为输出。
printf("hello1\n");
printf("hello2\n");
somefunction();