【问题标题】:How to pass "*" argument to main()? [duplicate]如何将“*”参数传递给 main()? [复制]
【发布时间】:2019-03-17 20:55:42
【问题描述】:

我写了一个程序,它可以接受来自命令行的参数,它应该是一个数字、一个运算符(长度为 1)和另一个数字:

int main(int argc , char *argv[]){
    if (argc < 4){
        printf("Too few arguments (4 required)");
        return -1;
    }

    char *a = argv[1];
    char b = *argv[2];
    char *c = argv[3];

    printf("%s %c %s = ...", a, b, c);
    return 0;
}

这似乎工作正常,例如当我通过110 + 11 我得到:

110 + 11 = ...

但是如果我通过运算符* 传递一些东西,比如110 * 11,它就会搞砸:

110 b c_nums.cbp = ...

似乎唯一可行的方法是,如果我将 * 替换为 ^*'*' 并将 char b = *argv[2]; 更改为 char b = *(argv[2]+1);

我假设这与 cmd 或任何格式的命令有关,但我如何才能在不总是传递 ^&lt;op&gt; 而不是 &lt;op&gt; 的情况下解决这个问题?

编辑:好的,所以看起来 "*" 在 cmd 中工作,但 不是 Code::Blocks 出于某种原因。

【问题讨论】:

  • 这是因为 shell 会将 * 扩展为文件列表。运行程序时需要引用 *
  • 如果需要四个参数,请将表达式更改为:(argc != 4)
  • 这与 C 无关,它是您从中调用程序的 shell。你也可以使用\*
  • "*" 给了我与* 相似的结果,\* 也是如此

标签: c shell


【解决方案1】:

* 字符对 shell 具有特殊意义。它甚至在你的程序执行之前就被解释了。

您需要从 shell 中转义 * 以便您的程序可以看到它,方法是在其前面加上反斜杠或将其括在引号中。

【讨论】:

  • 好收获。通配符。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2016-08-02
  • 2012-03-12
  • 2014-06-28
相关资源
最近更新 更多