首页 > 解决方案 > 将 *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 循环中发生了段错误。不过,我看不到该程序如何尝试访问受限内存。我已经被这个卡住了很长一段时间了。

希望我提供了足够的信息,但如果我的问题太模糊,请告诉我。

谢谢!

标签: c++carrayssegmentation-fault

解决方案


您是否尝试过使用 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]));
    }
}

推荐阅读