【问题标题】:Printing the value of "p+p[3]-p[1]"打印“p+p[3]-p[1]”的值
【发布时间】:2015-08-06 15:16:27
【问题描述】:
#include<stdio.h>
#include<string.h>

int main()
{
    char c[]="HELLO2014";
    char *p;
    printf("%s\n",p+p[3]-p[1]);
    return 0;
}

上面的 C 代码在 Answer 中输出 14。请解释一下如何?

【问题讨论】:

  • 这似乎让事情变得比他们需要的更困难......你到底想完成什么?
  • 此代码导致未定义的行为,因为p+p[3] 超出了c 的范围。

标签: c string printf


【解决方案1】:

这是一个诡计。

首先你的 sn-p 缺少一个语句,你应该添加char *p = c;或者直接在printf中使用c

p[3]-p[1]

这些是字符 L 和 E,对应 ASCII 码中的 76 和 69。

所以你的printf 变成了

printf("%s\n",p + 7 );

将 char 数组移动 7 位,因此 14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2022-12-04
    • 2022-07-28
    相关资源
    最近更新 更多