【问题标题】:explanation of the output of the following program [duplicate]以下程序输出的解释[重复]
【发布时间】:2017-10-06 06:00:28
【问题描述】:
#include<stdio.h>
void main()
{
printf(5+"good morning");/*need explanation for this line
return 0;
}

程序的输出是 - 早上 谁能解释一下?

【问题讨论】:

  • 欢迎使用 C,我们这里有混淆。现在试着解释一下这是做什么的:printf((char*restrict const const const const)??&lt;&amp;5??("good morning":&gt;%&gt;);.

标签: c


【解决方案1】:

printf的原型

int printf(const char *format, ...);

这里formatconst char* 的一种类型,指向字符串文字的第一个元素的地址。当你在printf 中传递5+"Good morning" 时,你真正传递的是字符串的内存地址加上5。加号5 表示打印将在字符串开头之后开始5 chars,并且单词“Good”后面的空格算作字符。

【讨论】:

    【解决方案2】:

    当您使用5+"good morning" 调用时,参数将转换为指针。这意味着在可执行文件的某处存储了字符串常量"good morning",并且编译器传递了它的指针。像这样:

    const char txt[]="good morning\0";
    printf(5+txt);
    

    所以printf 将获得评估指针txt+5,它绕过了字符串中的前 5 个字符(因为一个字符是单个 BYTE 和 8 位 WORD 寻址机器上的单个内存地址)。

    【讨论】:

      【解决方案3】:

      程序的输出是——早上

      printf(5+"good morning");
      

      打印" " 内的字符串,越过前五个字符。所以前四个字符good 和第五个字符空格将被越过,其余的字符串将被打印出来。

      【讨论】:

        【解决方案4】:

        Printf()方法,用于打印()中的文字

        它只打印“morning”,并且 5+ 绕过了前 5 个字符,即“g”“o”“o”“d”和“”(空格)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-29
          • 1970-01-01
          • 1970-01-01
          • 2014-09-07
          • 2019-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多