有人能告诉我为什么c语言会发生这种情况吗 #包括 //编译器版本gcc 6.3.0 内部主(空) { INTA=10; printf(“%d”+1,a); 返回0; }
输出。--d有人能告诉我为什么c语言会发生这种情况吗 #包括 //编译器版本gcc 6.3.0 内部主(空) { INTA=10; printf(“%d”+1,a); 返回0; },c,C,输出。--d #包括 //编译器版本gcc 6.3.0 内部主(空) { #包括 //编译器版本gcc 6.3.0 内部主(空) { INTA=10; printf(“%d”+36,a); 返回0; } 输出。--p 请解释为什么会发生这种情况…每当我更改+1的值时,它都会打印不同的输出…代码的行为未定义 %d”+1实际上是在向常量字符*指针中添加1(在某些情况下,%d”文本将衰减为常量字符*指针),这实际上会将您带到该字符串文本中的d。printf格式设置程序因此不适合您的参数 “%d”+3
#包括
//编译器版本gcc 6.3.0
内部主(空)
{
#包括
//编译器版本gcc 6.3.0
内部主(空)
{
INTA=10;
printf(“%d”+36,a);
返回0;
}
输出。--p
请解释为什么会发生这种情况…每当我更改+1的值时,它都会打印不同的输出…代码的行为未定义
%d”+1
实际上是在向常量字符*
指针中添加1(在某些情况下,%d”
文本将衰减为常量字符*
指针),这实际上会将您带到该字符串文本中的d
。printf
格式设置程序因此不适合您的参数
“%d”+36
确实会做非常糟糕的事情,因为从“%d”
一开始,36个位置的内存就不属于您
你的意思是不是像printf(“%d”,a+1);
&c
最后,什么是一个
Int
?你不是说Int
?Int
不是一种类型(尽管Int
是)。在任何情况下,您的格式都很糟糕。请修复。@PySerialKiller,这是不正确的。下次,使用gcc-Wall-Wextra-g
编译以获取警告和调试信息。请告诉您的其他同学不要将此发布到SO。并且printf(“%d”+36,a);
将带您进入内核代码。
#include <stdio.h>
//Compiler version gcc 6.3.0
int main(void)
{
int a=10;
printf("%d"+1,a);
return 0;
}
#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;
}