命令行参数中的罕见行为

时间:2016-09-30 17:05:22

标签: c++

我正在尝试使用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而不是*)

由于没有将*作为输入参数而导致失败,导致失败。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

命令行上的项目由shell处理。

在shell中,*执行glob操作

通常,glob运算符单独站立时,将生成当前目录中所有文件的列表。

答案 1 :(得分:3)

角色*在大多数炮弹中都有特殊含义。您的shell将其扩展为当前目录中的文件,从而产生与您想要的参数完全不同的参数。

为避免这种情况,你可以这样做:

 $ ./exec "*"

 $ ./exec '*'

如果你的shell是bash,那么你也可以用:

关闭globbing扩展
$ set -o noglob

$ set -f

但我会建议前面的选项(上面),因为它是" minimal"并且不会影响shell的默认行为。