我可以使用条件运算符初始化C风格的字符串文字吗
Can I use conditional operator to initialize C style string literal?
我正在尝试使用三元运算符(?:
(将字符数组初始化为一个字符串或另一个
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
视为一个,因为您试图使用条件运算符进行初始化。编译器直接将其视为char
s的数组。
但声明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要少一些,所以不要这样做。
相关文章:
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 比较 std::string 和 C 样式字符串文字
- 如何从char16_t字符串文字中读取双精度?
- 如果我在块中编写字符串文字,是否会从数据部分复制整个字符串数据?
- C++ 不能在cout中使用向量和字符串文字
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- C++:Unicode 字符串文字的可移植性
- 返回空字符串文字 VS. 返回空点 - 它们是一样的吗?
- 确保字符指针始终指向相同的字符串文字
- 如何按照 Google C++风格指南连接字符串文字?
- 通过 constexpr 中的 'const char *' glvalue 访问字符串文字的值会出错
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 另一个字符串文字,UDL 迷宫
- strlen 是否针对字符串文字进行了优化?
- 用户定义的字符串文字为字符串null终止