【问题标题】:C: assignment to char... expects cast?C:分配给 char... 需要演员表吗?
【发布时间】:2012-12-10 11:19:30
【问题描述】:

使用

int main(int argc, char *argv[])

{
    double number1, number2;
    char operator;

    number1 =atof (argv[0]);
    operator =argv[1];        // line 29
    number2 =atof (argv[2]);

编译器抱怨说

29 警告:赋值从没有强制转换的指针生成整数 [默认启用]

【问题讨论】:

  • 因为还没有人说:argv[0] 通常是可执行文件的名称[可能是其他东西,您可以调用exec 家族的成员传递argv[0] 的任何内容],你想要的命令行参数从argv[1]开始。

标签: c casting command-line-arguments


【解决方案1】:

argv[1] 是指向 char 的指针,您不能将其分配给 char。将运算符转换为 char * 或尝试 operator = *(argv[1]);

【讨论】:

    【解决方案2】:
    operator =argv[1];        // line 29
    

    这里,argv[1] 的类型为 char*。但是operator 是类型char。这就是出错的原因。

    如果您只想获取从命令行传递的单个字符的运算符,那么:

    operator=argv[1][0];
    

    会的。

    请注意,最好使用strto* 进行转换,因为ato* 函数不会检测到错误。

    【讨论】:

    • @Duncan 这是argv[1] 中的第一个字符。例如,如果您在命令行中将+ 传递为argv[1],那么它将是"+"。所以当你做argv[1][0]时,它是argv[1]中的第一个字符,这里是+
    【解决方案3】:

    变量operatorchar 类型,而argv[1]char * 类型。

    一个是单个字符,另一个是指向字符的指针(即字符串)。

    PS。即使只使用纯 C 时它也能工作,你也应该避免使用 C++ 关键字(如 operator),因为这会使移植到 C++ 变得更加困难。

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2012-03-20
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多