我在下面的代码中接受命令行参数。
问题在于,如果我在Linux上运行此代码,*
是一个glob,它引用目录中的所有文件(我知道这是因为我打印了参数并打印了我的文件列表) ,这导致我的代码不进行乘法运算。所有其他操作都正常。
我尝试在*
之前加上\
,例如:\*
我还尝试过用引号将其传递,例如:'*'
但是,这些方法都不会使我的代码进行乘法。
代码如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a, b, result;
char opr;
if(argc!=4)
{
printf("Invalid arguments...\n");
return -1;
}
a = atoi(argv[1]);
b = atoi(argv[3]);
opr=argv[2][0];
switch(opr)
{
case '+':
result=a+b;
break;
case '-':
result=a-b;
break;
case '*':
result=a*b;
break;
default:
result=0;
break;
}
if(opr=='+' || opr=='-' || opr=='*')
printf("Result: %d %c %d = %d\n",a,opr,b,result);
else
printf("Undefined Operator...\n");
return 0;
}
如何将星号作为参数传递给应用程序?
答案 0 :(得分:3)
使用''
(单引号)或""
(双引号)或用前面的\
进行转义都可以。您可以像这样测试它:
$ echo *
bar foo
$ echo '*'
*
$ echo "*"
*
$ echo \*
*
在后两种情况下,shell不会扩展它。双引号也足够,但可能导致其他一些字符出现问题。单引号更安全。
您还可以使用strace
运行程序来检查给定的参数向量:
$ strace echo "*"
execve("/bin/echo", ["echo", "*"], 0x7ffc26311518 /* 24 vars */) = 0