【发布时间】: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 或任何格式的命令有关,但我如何才能在不总是传递 ^<op> 而不是 <op> 的情况下解决这个问题?
编辑:好的,所以看起来 "*" 在 cmd 中工作,但 不是 Code::Blocks 出于某种原因。
【问题讨论】:
-
这是因为 shell 会将 * 扩展为文件列表。运行程序时需要引用 *
-
如果需要四个参数,请将表达式更改为:
(argc != 4)。 -
这与 C 无关,它是您从中调用程序的 shell。你也可以使用
\* -
"*"给了我与*相似的结果,\*也是如此