如何从C命令行中读取asterisk(*)作为参数

我编写了一个代码来执行简单的算术运算,从命令行获取输入。 所以,如果我想进行乘法运算,我会在终端输入“prog_name 2 * 3”,输出“Product:6”。

问题是,除了乘法之外,所有操作都有效。 经过一些测试,我发现用于获取运算符的第三个参数(argc [2])实际上是存储程序名称。 那么我怎样才能做到这一点呢?

这是代码:

#include  #include  void main(int argc, char *argv[]) { int a, b; if(argc != 4) { printf("Invalid arguments!"); system("pause"); exit(0); } a = atoi(argv[1]); b = atoi(argv[3]); switch(*argv[2]) { case '+': printf("\n Sum : %d", a+b); break; case '-': printf("\n Difference : %d", ab); break; case '*': printf("\n Product : %d", a*b); break; case '/': printf("\n Quotient : %d", a/b); break; case '%': printf("\n Remainder: %d", a%b); break; default: printf("\n Invalid operator!"); } } 

这与C无关,但与你的shell无关。 如果您希望能够将它们作为参数,则需要引用* (和其他shell特殊字符)。 否则shell将进行替换,特别是globbing。

所以你需要用以下方式调用你的程序:

 ./myprog 3 '*' 2 

实际上,操作系统是负责扩展通配符的操作系统,因此它是特定于操作系统的(C程序只接收操作系统解释的内容)。

也就是说,在大多数操作系统中,如果引用通配符,则不会扩展program_name 2 "*" 3 。 更好的是,将整个表达式作为单个参数传递( program_name "2 * 3"

您的问题不在您的代码中。 它在OS / shell中。 你看,命令行中的*扩展到目录内容,所以参数2 * 3扩展为2 dir1 dir2 file1, file2, etc...

我建议你使用类似“2 * 3”作为参数的东西,比如sscanf(argv[1], "%d%c%d", &a, &command, &b);