V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
donglongtu
V2EX  ›  Linux

一道 C 语言 printf 的经典题目

  •  
  •   donglongtu · Jul 1, 2017 · 6606 views
    This topic created in 3224 days ago, the information mentioned may be changed or developed.

    下列程序,输出结果?

    #include <stdio.h>
    int main() {
        int i = 43;
        printf("%d\n",printf("%d",printf("%d",i)));
        return 0;
    }
    

    原系列出处:Linux 下 C 语言的几道经典面试题

    31 replies    2017-07-03 09:20:19 +08:00
    waycool
        1
    waycool  
       Jul 1, 2017   ❤️ 1
    4321
    21grams
        2
    21grams  
       Jul 1, 2017   ❤️ 1
    有啥经典的
    ldbC5uTBj11yaeh5
        3
    ldbC5uTBj11yaeh5  
       Jul 1, 2017
    来来来,自认 c/c++ 面霸们的试试这个 /t/370278#r_4451518
    darrenliuwei
        4
    darrenliuwei  
       Jul 1, 2017
    @waycool 结果为什么会是 4321 啊?
    darrenliuwei
        5
    darrenliuwei  
       Jul 1, 2017
    @waycool 我运行了,结果确实是 4321,但是不明白为什么会是 4321 ?
    markx
        6
    markx  
       Jul 1, 2017
    @darrenliuwei 你查一查 printf 的返回值就明白了呀。
    Cooky
        7
    Cooky  
       Jul 1, 2017 via Android
    @darrenliuwei printf 返回打印的字符串长度吧
    k9982874
        8
    k9982874  
       Jul 1, 2017 via iPad   ❤️ 2
    有啥经典的?测试答题者熟不熟悉 printf 函数?
    low 的不行
    zonyitoo
        9
    zonyitoo  
       Jul 1, 2017
    man 一下 printf 不就知道了,这问题纯粹就是看你有没有认真读过 printf 的函数文档罢了
    feather12315
        10
    feather12315  
       Jul 1, 2017 via Android
    @darrenliuwei 一个命令:gcc -S
    换个字面的解释:AMD64 指令集,函数调用过程:第一、2 个参数,mov 到某个寄存器,rax 放系统调用号? 再 syscall。
    printf 第一个参数就是那个"%d",第二个参数呢?:)
    ldbC5uTBj11yaeh5
        11
    ldbC5uTBj11yaeh5  
       Jul 1, 2017
    printf 比较经典面试题是 EMC 的某道校招题,和 fork 集合起来考察缓冲区的理解。比较不错。

    至于楼主这道,小学生。
    CEBBCAT
        12
    CEBBCAT  
       Jul 2, 2017 via Android
    这题,考察的是执行顺序与返回值?
    20015jjw
        13
    20015jjw  
       Jul 2, 2017 via Android
    给大佬们跪了...
    misaka20038numbe
        14
    misaka20038numbe  
       Jul 2, 2017
    printf 返回值是 int,我看函数声明这样写
    ogfa
        15
    ogfa  
       Jul 2, 2017   ❤️ 1
    就从这种帖子就能看出来这里的都是些什么水平的货色
    小学生真是高看它了

    回你的贴都是对人的一种侮辱
    lechain
        16
    lechain  
       Jul 2, 2017
    看这里 https://linux.die.net/man/3/printf
    或者在自己的电脑上这样子
    ```
    cat /usr/include/stdio.h | grep printf
    extern int fprintf (FILE *__restrict __stream,
    extern int printf (const char *__restrict __format, ...);
    extern int sprintf (char *__restrict __s,
    ·······
    ```

    看第三行, 有返回值的
    lechain
        17
    lechain  
       Jul 2, 2017
    man 手册里面对返回值的说明具体是这句话

    Upon successful return, these functions return the number of characters printed (excluding the null byte used to end output to strings).
    Shura
        18
    Shura  
       Jul 2, 2017 via Android
    还不如这样考,printf("%d\n",printf("%d",scanf("%d%d",&a,&b)));
    sergeant
        19
    sergeant  
       Jul 2, 2017
    别鄙视楼主了,至少我这个小学生学到了
    coderluan
        20
    coderluan  
       Jul 2, 2017
    如果用了现实中不会出现的写法,那么这道题就提到不什么经典。
    Yunhao
        21
    Yunhao  
       Jul 2, 2017 via iPhone   ❤️ 3
    为什么有些人的回复总喜欢充满恶意
    baixiangcpp
        22
    baixiangcpp  
       Jul 2, 2017
    看不出哪里经典了,挺无聊的题目
    hjc4869
        23
    hjc4869  
       Jul 2, 2017 via iPhone
    int x=100;
    printf("%d");

    32bit msvc cl -O0 编译
    输出?
    LigeLaige
        24
    LigeLaige  
       Jul 2, 2017
    printf 簇函数 ( printf/sprintf/fprintf ) 返回打印的字符串的长度
    printf "43" 返回长度 2, "2" 返回长度 1 (延伸:"1" 还是返回 1 )

    所以 console 里面看到的是 4321,可以分开看:先打印 43,然后打印 2,然后打印 1,如果在调一层,就还是 1 ( 43211 )。
    momocraft
        25
    momocraft  
       Jul 2, 2017
    第一次看错了, 以为是考参数计算顺序 (ub) 的
    shiji
        26
    shiji  
       Jul 2, 2017 via Android
    这是在刷 seo 么,我记得今天在 segment fault 看见过一模一样的东西。
    21grams
        27
    21grams  
       Jul 2, 2017
    回字有四种写法,你们都学到了吗?
    besto
        28
    besto  
       Jul 2, 2017
    我来出一道题吧,关于 printf 的。
    #include <stdio.h>
    int main(){
    int n = 0;
    printf("HELLO %d\n%n", n, &n);
    printf("%d\n", n);
    return 0;
    }
    Vfeather
        29
    Vfeather  
       Jul 2, 2017
    不是很理解。
    jeffersonpig
        30
    jeffersonpig  
       Jul 3, 2017
    写了几年 C/C++从来没用过 printf 的返回值……
    araraloren
        31
    araraloren  
       Jul 3, 2017
    @jigloo 不错 我还真不知道 sizeof('a') 在 c 和 c++ 里面竟然不一样。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5373 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 07:13 · PVG 15:13 · LAX 00:13 · JFK 03:13
    ♥ Do have faith in what you're doing.