-3

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

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

}

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

4

3 回答 3

8

使用strcmp比较char数组

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

使用==just 比较指向两个不同字符串的指针。

请参阅 Darius Kucinskas 比较_TCHAR数组的答案

于 2013-08-19T18:46:57.090 回答
5
if (_tcscmp(argv[1], _T("arg1")) == 0) {
    cout << "Argument1 was passed" << endl;
}
于 2013-08-19T18:50:13.497 回答
0

你有几个错误:

1) 不能使用 == 运算符比较 C 风格的字符串(字符数组)。 argv[#]是一个字符数组,就像_T("some value"). 为了比较它们,您需要使用strcmp(或其中一个表亲),或将其存储在std::string.

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

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

于 2013-08-19T18:58:28.637 回答