2019年2月28日 / 85次阅读
CC++
本文介绍一道Intel的C语言笔试题,看似简单,其实有一个隐含的,容易被忽略的重要知识点。
问题:下面的程序输出是什么?
int main(){
fprintf(stdout,"Hello ");
fprintf(stderr,"World!");
return 0;
}
麦新杰看到这道题的时候,突然不会做了,答案如果是Hello World!,一定是错的。
先说正确答案:World!Hello 。
验证如下:
[xinlin@promote test]$ vi test.c
[xinlin@promote test]$ cat test.c
#include <stdio.h>
int main(){
fprintf(stdout, "Hello ");
fprintf(stderr, "World!");
return 0;
}
[xinlin@promote test]$ gcc test.c
[xinlin@promote test]$ ./a.out
World!Hello
为什么会这样?
先复习以下两个知识点:
这道题的程序代码很简单,就是用fprintf先想stdout输出Hello,再向stderr输出World!,默认情况下,stdout和stderr这两个默认打开的文件描述符,都是指向显示器。
不过,这道题还考察一个细节,在默认情况下,输出到stdout的字节流有缓存,只有到换行的时候,才会真正输出。而stderr没有缓存,直接输出。
现在修改一下代码,将两行输出加上换行:
[xinlin@promote test]$ cat test.c
#include <stdio.h>
int main(){
fprintf(stdout, "Hello \n");
fprintf(stderr, "World!\n");
return 0;
}
[xinlin@promote test]$ gcc test.c
[xinlin@promote test]$ ./a.out
Hello
World!
加上换行之后,这段C代码就按顺序向屏幕输出了。
本文链接:https://www.maixj.net/ict/intel-c-20341
©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。