#include <stdio.h>
#include <stdlib.h>
int main()
{ char a="aaa";
printf("%c \n",a);
return 0;
}
o / p是: -
$
此代码如何在内部运行?是否有预定义的方式用于所有编译器或它从编译器更改为编译器?
PS: - 我已经看到了与这个程序相关的问题,在上面程序的编译器的哪个阶段给出了错误......当我试图在两个不同的编译器上运行这个程序时,它只给出警告而不是错误。所以根据你的理想情况,这个程序应该在编译器的哪个阶段给出错误?
答案 0 :(得分:4)
您的代码无效C.初始化char a="aaa";
是约束违规。标准C语言不支持从指针类型到整数类型的隐式转换。我确定您的编译器发出了关于它的诊断消息。之后,C语言不再定义代码的行为。
行为仍然可以由编译器定义为扩展,这意味着是的,它可以从一个编译器(允许它)更改为另一个编译器。
答案 1 :(得分:0)
char a="aaa"
没有语义含义。就像你尝试用数组初始化一个浮点数一样。
具有您需要的语义含义
char *a="aaa"
左右
char a[]="aaa"
左右
char *a={'a', 'a', 'a', 0}
(这里的0与以前的含义相同很重要)
左右
char a[4]={'a', 'a', 'a', 0}
在另一边
printf("%c \n",a);
也没有任何意义,因为printf希望传递一个ascii char,而你传递一个指针(强制过程中的数组被转换为指针)。
因此printf将从指针值中读取最低位。