首页 » 信息技术 »

Intel的一道C语言笔试题

2019年2月28日 / 13次阅读
CC++

  • 打开支付宝,搜索“ 529018372 ”,领取专属红包!每日支付每日领。

本文介绍一道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

为什么会这样?

先复习以下两个知识点:

Linux系统的重定向

函数printf,sprintf,fprintf

这道题的程序代码很简单,就是用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

相关文章

留言区


前一篇:
后一篇:
推一篇:可靠正规,长期稳定,网络兼职项目!!

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top