我可以使用条件运算符初始化C风格的字符串文字吗

Can I use conditional operator to initialize C style string literal?

本文关键字:字符串 文字 风格 可以使 条件运算符 初始化 我可以      更新时间:2023-10-16

我正在尝试使用三元运算符(?:(将字符数组初始化为一个字符串或另一个

char answ[] = ans > 0 ? "Anton" : "Danik";

其中ans只是之前获得的一个整数,我一直得到错误:

initialization with '{...}' expected for aggregate object

是不是你根本无法通过三元运算符初始化数组?


我也试过这个:

char answ[] = { ans>0 ? "Anton" : "Danik" };

出现错误的原因:

value of type "const char *" cannot be used to initialize an entity of type "char"

是不是你根本无法通过三元运算符初始化数组?

事实上,你做不到。

在您的示例中,您不希望只有数组。您想要字符串文字-一个特定的数组。不幸的是,编译器并没有将answ视为一个,因为您试图使用条件运算符进行初始化。编译器直接将其视为chars的数组。

但声明C字符串有不同的方法——使用const和指针。

const char* answ = ans > 0 ? "Anton" : "Danik";

这种方法的缺点是,好吧,const——你不能修改这个字符串。

这就是为什么,如果你使用C++,你应该使用它的字符串-std::string:

std::string answ = ans > 0 ? "Anton" : "Danik";

在C中,您可以执行:

char answ[6];
ans > 0 ? strcpy(answ, "Anton") : strcpy(answ, "Danik");

但在这一点上,三元运算符只是比正常的ifelse要少一些,所以不要这样做。