如何将字符串隐式类型转换为字符?

时间:2016-12-09 08:07:22

标签: c string compiler-errors char

#include <stdio.h>
#include <stdlib.h>

int main()
 {   char a="aaa";
     printf("%c \n",a);
     return 0;
 }

o / p是: -

  

$

此代码如何在内部运行?是否有预定义的方式用于所有编译器或它从编译器更改为编译器?
PS: - 我已经看到了与这个程序相关的问题,在上面程序的编译器的哪个阶段给出了错误......当我试图在两个不同的编译器上运行这个程序时,它只给出警告而不是错误。所以根据你的理想情况,这个程序应该在编译器的哪个阶段给出错误?

2 个答案:

答案 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将从指针值中读取最低位。