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)
你的shell正在扩展glob模式,[yyyy\d\d\d]*所以这导致的实际参数数量取决于当前目录的内容!
将[yyyy\d\d\d]成为一个字符类匹配的字符y和d,以及*后面的比赛什么,所以我猜你的当前目录下有4个文件,与启动y或d.要查看它扩展到的内容,请使用echo:
$ echo [yyyy\d\d\d]*
Run Code Online (Sandbox Code Playgroud)
为了使其按预期工作,请引用参数:
$ ./stringmatch '[yyyy\d\d\d]*' yyyy1234
Run Code Online (Sandbox Code Playgroud)