【问题标题】:C++ char* to int errorC++ char* 到 int 错误
【发布时间】:2012-11-18 00:26:11
【问题描述】:

我想获取一个命令行参数(它将是一个大于零的整数)并将其用作函数中的整数参数(以决定使用函数的哪一部分)。

double func(double x, double y, double z, int n) {
  if (n==1) { return 1; } 
  if (n==2) { return 2; }
  // etc
}
int main (int argc, char *argv[]) {
  int n = argv[1];
  // etc, later I call func(x,y,z,n) with this definition of n
}

当我尝试编译时,我收到了一些警告:

warning: invalid conversion from ‘char*’ to ‘int’
warning: initializing argument 4 of ‘double func(double, double, double, int)’

我想我明白为什么会这样,只是不知道如何解决。到目前为止,我发现谷歌搜索没有任何帮助。我是 C++ 的新手,任何能指引我正确方向的信息都会很棒。感谢您的时间。

【问题讨论】:

  • 提示:argv 的类型为 char**。你可以把它想象成一个字符串数组。
  • 您可能正在寻找这个:cplusplus.com/reference/clibrary/cstdlib/atoi
  • 参数将是大于零的整数。这将是一个 C 风格的字符串,希望 表示大于零的整数的值。您需要将该 C 样式字符串转换 为它所代表的值。

标签: c++ char int


【解决方案1】:

argv[1] 的类型为 char*。使用strtol将其转换为整数:

char *ptr;
int n = strtol(argv[1], ptr, 10);
/* Error checking */

【讨论】:

    【解决方案2】:

    您可以使用std::istringstream转换数字:

    int main(int ac, char * av[]) {
        int av1;
        if (2 <= ac
            && std::istringstream(av[1]) >> av1) {
            do_something_with(av1);
        }
        else {
            report_error();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多