C++ 命令行参数中的罕见行为

C++ 命令行参数中的罕见行为,c++,C++,我正试图写一个程序在cpp使用地图 我的目标是允许*单独通过comand line参数 我必须限制与*(即)abc和abc一起出现的字符 当我运行这个程序时,得到以下输出 $ ./exec * $ 1 $ failure argv[1]=1(打印1而不是*) 失败,因为没有将*作为输入参数,它将导致失败 有人能帮我解决这个问题吗?命令行上的项目由shell处理 在shell中,*执行glob操作 一般来说,glob操作符单独运行时,将生成当前目录中所有文件的列表。字符*在大多数s

我正试图写一个程序在cpp使用地图

我的目标是允许*单独通过comand line参数

我必须限制与*(即)abc和abc一起出现的字符

当我运行这个程序时,得到以下输出

 $ ./exec *
   $ 1
   $ failure
argv[1]=1(打印1而不是*)

失败,因为没有将*作为输入参数,它将导致失败


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

命令行上的项目由shell处理

在shell中,
*
执行
glob
操作


一般来说,
glob
操作符单独运行时,将生成当前目录中所有文件的列表。

字符
*
在大多数shell中具有特殊意义。shell将其扩展到当前目录中的文件,从而产生与预期参数完全不同的参数

要避免这种情况,您可以执行以下操作:

 $ ./exec "*"


如果您的shell是bash,那么您还可以通过以下方式关闭globbing扩展:

$ set -o noglob


但我建议使用前面的选项(如上所述),因为它是“最小的”,否则不会影响shell的默认行为。

您知道“cpp`不是”c“,对吗?长度是多少?长度是多少?”?请发布显示问题的。包含
#include
文件。此程序不编译:语法错误,至少缺少#include。为什么不让部件尽你所能工作,而不是让我们解决你已经知道如何解决自己的问题?或者,正如上面的海报所说:。修复方法是以以下方式运行程序:
/prog'*'
/prog'*'
/prog\*
。我会用第一个。
 $ ./exec '*'
$ set -o noglob
$ set -f