gpt4 book ai didi

c - 如何在 Linux 中将星号作为命令行参数?

转载 作者:行者123 更新时间:2023-11-30 18:33:24 24 4
gpt4 key购买 nike

我在下面的代码中获取命令行参数。

问题是,如果我在 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;
}

如何将星号作为参数传递给我的应用程序?

最佳答案

使用 '' (单引号)或 "" (双引号)引用或使用前面的 \ 转义都应该可以。你可以这样测试:

$ echo *
bar foo
$ echo '*'
*
$ echo "*"
*
$ echo \*
*

在后两种情况下 shell 不会扩展它。双引号也足够了,但可能会导致其他一些字符出现问题。单引号更安全。

您还可以使用 strace 运行程序来检查给定的参数 vector :

$ strace echo "*"
execve("/bin/echo", ["echo", "*"], 0x7ffc26311518 /* 24 vars */) = 0

关于c - 如何在 Linux 中将星号作为命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com