为什么argc返回6而不是3?

Jim*_*imm 1 c++ arguments argc

我有以下程序,我在命令行传递2个参数,如下所示.我期待argc为3,但它打印为6.为什么?

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;
void usage();

int main(int argc, char *argv[])
{
    cout << argc << endl;
    if (argc != 3)
            usage();

    string regex = argv[1];
    string searchString = argv[2];

    cout << "regex: " << regex << " . searchString: " << searchString << endl;

    return 0;
}

void usage()
{
    cout << "Usage: ./stringmatch <regex> <searchString>" << endl;
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

命令行:

[jim@cola c++]$ ./stringmatch [yyyy\d\d\d]* yyyy1234
 6
 Usage: ./stringmatch <regex> <searchString>
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 7

你的shell正在扩展glob模式,[yyyy\d\d\d]*所以这导致的实际参数数量取决于当前目录的内容!

[yyyy\d\d\d]成为一个字符类匹配的字符yd,以及*后面的比赛什么,所以我猜你的当前目录下有4个文件,与启动yd.要查看它扩展到的内容,请使用echo:

$ echo [yyyy\d\d\d]*
Run Code Online (Sandbox Code Playgroud)

为了使其按预期工作,请引用参数:

$ ./stringmatch '[yyyy\d\d\d]*' yyyy1234
Run Code Online (Sandbox Code Playgroud)

  • @Jimm它被称为'shell globbing'. (2认同)