c++ - 将 *argv[] 中的偶数/奇数元素添加到数组
问题描述
我对 C++ 相当陌生,我正在制作一个简单的程序,它将值和单位作为系统参数并将它们全部转换为一个单位。命令行执行和输入是这样的:
./unit_conv 3 feet 5 inches centimeters
值和单位由空格分隔,最后一个参数是我想要将所有内容转换为的单位。
我获取输入的方法是在最后一个元素之前将 *argv[] 的所有偶数元素添加到一个名为“values”的整数数组中,并将所有奇数元素添加到一个名为“units”的字符指针数组中。以下是我尝试的实现:
if (argc % 2 == 0) {
char * desiredUnit = argv[argc - 1];
int values[argc];
char * units[argc];
int j;
int k;
for (int i = 1; i < argc; i++) {
if (i % 2 == 1) {
values[j] = atoi(argv[i]);
j++;
}
else {
units[k] = argv[i];
k++
}
}
}
在我上面提到的执行后,我得到以下信息:
Segmentation fault (core dumped)
我知道我的 for 循环中发生了段错误。不过,我看不到该程序如何尝试访问受限内存。我已经被这个卡住了很长一段时间了。
希望我提供了足够的信息,但如果我的问题太模糊,请告诉我。
谢谢!
解决方案
您是否尝试过使用 STL?
std::vector<std::string> units{};
std::vector<int> values{};
for (std::size_t i {1}; i < argc; ++i) {
if (i % 2 == 0) {
units.push_back(std::string{argv[i]});
} else {
values.push_back(std::atoi(argv[i]));
}
}
推荐阅读
- javascript - 如何使用多个类来修改单个数据源而不将其声明为全局?
- bash - 用于 wget 以特定字符开头的 url 的 Bash 脚本
- c++ - constexpr if else 表达式中的“预期语句”
- delphi - 使用 BASS dll 和 Delphi 创建 flac 文件或 flac 流
- stata - 幂二均值:均值必须包含数字
- git - mac上的git-svn无法连接到远程svn仓库,而simple svn可以
- php - LOAD DATA INFILE 父子表和外键关系
- create-react-app - 如何通过 create-react-app 在远程开发盒上使用 npm start
- r - 将列表中的多个 data.tables 组合成两个 data.tables 的列表
- bit-framework - 如何在配置 json 文件中嵌套配置并使用位读取它?