首页 > 解决方案 > 我可以使用条件运算符来初始化 C 风格的字符串文字吗?

问题描述

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

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

whereans只是之前获得的一个整数,我不断收到错误消息:

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"

标签: c++initializationconditional-operator

解决方案


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

确实,你不能。

在您的示例中,您不想只有数组。您想要字符串文字 - 一个特定的数组。不幸的是,编译器没有将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");

但是在这一点上,三元运算符比普通的 if-else更简洁,所以不要这样做。


推荐阅读