c++ - 我可以使用条件运算符来初始化 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"
解决方案
是不是你根本无法通过三元运算符初始化数组?
确实,你不能。
在您的示例中,您不想只有数组。您想要字符串文字 - 一个特定的数组。不幸的是,编译器没有将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");
但是在这一点上,三元运算符比普通的 if-else更简洁,所以不要这样做。
推荐阅读
- c# - 保存动态创建的表单
- variables - 带有变量的 Makefile 目标未按预期工作
- python - pytest 是否应该从虚拟环境中的依赖模块收集测试?
- javascript - socket io 房间名称和特定房间内的用户数量
- python - 如何在 keras 中为 Sequential 模型实现 ctc 损失函数
- javascript - 当打印预览样式不适用于 Chrome
- express - Express/Morgan 未报告 Javascript 致命错误
- python - 我如何使用 django 提供图像 url
- matlab - MATLAB函数错误无解
- node.js - 是否有用于使用节点实验模块的快速项目的 webpackesque 实用程序?