参数解析错误

时间:2013-08-19 18:46:04

标签: c++ console command-line-arguments

我试图使用以下代码解析我的控制台应用程序中的运行参数:

int _tmain(int argc, _TCHAR* argv[])
{
    if(argv[1] == _T("arg1")) cout<<"Argument1 was passed";
    _getch();
    return 0;

}

我的代码不起作用。我的意思是,它运行,但控制台是空的。 我正在使用Visual Studio 2012中的Use Unicode Character Set选项进行编译(在Windows 7上)。 我的错误在哪里?!

3 个答案:

答案 0 :(得分:8)

使用strcmp比较char数组

if(strcmp(argv[1], "arg1") == 0)

使用==只是将指针与两个不同的字符串进行比较。

请参阅Darius Kucinskas关于比较_TCHAR数组

的答案

答案 1 :(得分:5)

if (_tcscmp(argv[1], _T("arg1")) == 0) {
    cout << "Argument1 was passed" << endl;
}

答案 2 :(得分:0)

你有一些错误:

1)您无法使用==运算符比较C样式字符串(字符数组)。 argv[#]是一个字符数组,_T("some value")也是。为了比较它们,您需要使用strcmp(或其中一个表兄弟),或将其存储在std::string中。

2)您正在尝试访问数组的第二个元素,但只存在一个元素。你说你没有通过任何呼叫,这意味着argv[0]将包含数据(你正在运行的可执行文件的名称),但argv[1]不会。通常,尝试访问它将尝试访问具有未定义结果的数组范围之外的数据。在这种特殊情况下,标准(第3.6.2节)规定它始终为0(又称为NULL)。所以你的条件总是假的。

3)当预期命令行参数时,您应该始终检查argc的值。