改用这个:
char *y;
if(x == 's') y = "sauve";
else y = "hi";
printf("%s",y);
通过在语句y
之前if
而不是在内部声明,您正在扩展y
范围。而且你在这里不需要大括号。
编辑:(来自 Eric 和 Carl 的评论)
if (x == 's') char y[] = "sauve";
else char y[] = "hi";
printf("%s",y);
在 C 语法中,声明不是语句。的语法if
是if (expression) statement [else statement]
. 没有大括号的 if 中的单个“语句”必须是语句。它可能不是一个声明。它可以是一个复合语句,它是一个大括号括起来的块项列表,块项列表可以是或包含一个声明。
所以这里的声明是完全非法的。您不能y
在if-statement
没有大括号的情况下声明。
但是如果你添加大括号:
if (x == 's') { char y[] = "sauve"; }
else { char y[] = "hi"; }
printf("%s",y);
这在理论上是合法的,但现在有一个新问题......现在的声明y
现在被限制在{ ... }
范围内。会出现 : 类型的错误error: use of undeclared identifier 'y'
就printf
行了。