【问题标题】:Can anybody tell me why this happening in c [duplicate]谁能告诉我为什么会在c中发生这种情况[重复]
【发布时间】:2017-09-02 15:35:25
【问题描述】:
#include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

     int a=10;
    printf("%d"+1,a);

    return 0;
 }

输出。 --- d

#include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

    #include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

     int a=10;
    printf("%d"+36,a);

    return 0;
 }

输出。 --- p

解释一下为什么会发生这种情况...每当我更改 +1 的值时,它会打印不同的输出...

【问题讨论】:

  • Int 不是类型(尽管int 是)。无论如何,您的格式很糟糕。请修复。
  • @PySerialKiller 不正确。
  • 下一次,使用gcc -Wall -Wextra -g 编译以获取警告和调试信息。
  • 请告诉你班上的其他同学不要把它发给 SO。

标签: c


【解决方案1】:

您的代码行为未定义。

"%d"+1 实际上是在const char* 指针上加1(文字"%d" 在某些情况下会衰减为const char* 指针),这实际上会将您带到该字符串文字中的d!因此,printf 格式化程序不适合您的论点。

"%d"+36 确实会做非常糟糕的事情,因为你不拥有从 "%d" 开始的 36 个位置的内存

你的意思不是像printf("%d", a + 1); 之类的吗?

最后,Int 是什么?你不是说int吗?

【讨论】:

  • printf("%d"+36,a); 将您带到您的内核代码。
猜你喜欢
  • 2014-03-02
  • 2023-03-12
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2021-04-10
  • 2013-08-02
  • 2018-12-19
相关资源
最近更新 更多