【发布时间】:2019-01-06 19:33:12
【问题描述】:
我需要将字符串分配给a,然后使用%s 打印它。如果我运行以下代码,我会收到一条错误消息,指出 Invalid Initializer。有没有办法在不使用switch/case 或if/else 的情况下正确地做到这一点?
char a[25] = ((ws < 1) ? "Calm" :
(ws >= 1) && ws < 4) ? "Light Air" :
(ws >= 4 && ws <= 27) ? "Breeze" :
(ws >= 28 && ws <= 47) ? "Gale":
(ws >= 48 && ws <= 63) ? "Storm" : "Hurricane");
【问题讨论】:
-
没有。初始化器必须是一个常数。对于这个问题,您应该简化表达式。我建议您也为自己的代码做同样的事情。
-
你为什么要写上面的代码呢?你有没有想过要维护这段代码的人?如果以后还要加一些条件呢?
-
可维护的解决方案:使用头文件定义目标字符串,然后根据条件分配它们或
strcpy()它们。 -
您根本无法为字符串赋值。字符串是一个字符数组。您不能分配给数组。初始化不是赋值。您可以尝试使用指针:
const char* a = ... -
@EugeneSh。不,但原因不是初始化器必须是常量,因为它不必是。
标签: c string initialization ternary-operator