丝网印刷混乱?
我的代码是:
#include <stdio.h>
void main( int argc, char** argv) {
printf("%s", argv[0]);
system("pwd");
}
输出是:
[river@localhost studio]$ ./a.out
/home/river/Desktop/studio
./a.out[river@localhost studio]$
似乎 system("pwd") 首先打印,然后打印 argv[0] 。为什么? 如果我添加如下语句:
#include <stdio.h>
void main( int argc, char** argv) {
printf("%s", argv[0]);
fflush(stdout);
system("pwd");
}
输出为:
[river@localhost studio]$ ./a.out
./a.out/home/river/Desktop/studio
它工作正常,为什么?
my code is :
#include <stdio.h>
void main( int argc, char** argv) {
printf("%s", argv[0]);
system("pwd");
}
The output is:
[river@localhost studio]$ ./a.out
/home/river/Desktop/studio
./a.out[river@localhost studio]$
It seems that system("pwd") print first , then print argv[0] . why?
If I add a statement like following :
#include <stdio.h>
void main( int argc, char** argv) {
printf("%s", argv[0]);
fflush(stdout);
system("pwd");
}
The output is :
[river@localhost studio]$ ./a.out
./a.out/home/river/Desktop/studio
It work normally, why ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
printf
调用仅将输出放入缓冲区中。为了真正写入缓冲区,需要刷新。当您打印换行符时,输出会自动刷新,因此,如果您将printf
中的格式字符串替换为:"%s\n"
,则无需调用即可工作fflush
。The
printf
call only puts the output in a buffer. For the buffer to actually be written it needs to be flushed. Output is automatically flushed when you print a newline, so if you replace the format-string inprintf
with this:"%s\n"
it should work without the call tofflush
.另一种“修复”它的方法:
问题是 stdout 默认情况下是行缓冲的。
请参阅:
The other way to 'fix' it:
The thing is that stdout is linebuffered by default.
See: