我正在做一个基本的计算器来熟悉传递参数。我编写的函数是:
int op(char* sig, int num1, int num2)
{
char sign=*sig;
if(sign == '+') return num1+num2;
if(sign == '/') return num1/num2;
if(sign == '-') return num1-num2;
if(sign == '*') return num1*num2;
return 0;
}
我的主函数获取数字和符号,并调用“op”函数。
int main(int argc, char *argv[])
{
int num1=atoi(argv[1]);
int num2=atoi(argv[3]);
char* sig=argv[2];
int res=op(sig,num1,num2);
printf("%d\n",res);
}
问题是,当我通过终端使用“./”命令调用程序时,它不会将*
符号作为char。相反,当我在参数中使用*
时,该参数变为pipewriter.c
,这是我编写此代码的文件的名称。例如,./pw.exe 3 + 4
打印7
,而./pw.exe 3 * 4
只打印0。
如何将*
符号仅用作'*'
字符?
1条答案
按热度按时间sqougxex1#
*
是shell的一个特殊字符(用于文件名的globbing),所以如果你想将一个字符作为参数传递给你的程序,你需要将它引用或转义:'*'
"*"
\*
这三个变量之间的区别(以及为什么你可能想使用一个而不是另一个)在于它们如何与变量展开进行交互。对于你的目的(不涉及shell变量),它们中的任何一个都可以。