我正在尝试使用map ...
在cpp中编写程序我的目标是在通过命令行参数
时允许*单独使用我必须限制随* *(即) abc和abc
的字符int main(int argc,char *argv[])
{
prinf("%s\n",argv[1]);
char str[256] = "";
int length;
strcpy(str,argv[1]);
length = strlen(str);
if((str[0] = '*' )&& (length == 1))
printf("success\n");
else
printf("failure");
return 0;
}
当我运行此程序时,获得以下输出
$ ./exec *
$ 1
$ failure
argv [1] = 1(打印1而不是*)
由于没有将*作为输入参数而导致失败,导致失败。
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
命令行上的项目由shell处理。
在shell中,*
执行glob
操作
通常,glob
运算符单独站立时,将生成当前目录中所有文件的列表。
答案 1 :(得分:3)
角色*
在大多数炮弹中都有特殊含义。您的shell将其扩展为当前目录中的文件,从而产生与您想要的参数完全不同的参数。
为避免这种情况,你可以这样做:
$ ./exec "*"
或
$ ./exec '*'
如果你的shell是bash,那么你也可以用:
关闭globbing扩展$ set -o noglob
或
$ set -f
但我会建议前面的选项(上面),因为它是" minimal"并且不会影响shell的默认行为。