C ++ / CLI为什么字符串平等不起作用?

时间:2016-10-20 23:40:11

标签: .net c++-cli clr

我正在尝试按照C ++ / CLI代码运行:

int main(array<System::String ^> ^args)
{
    // check if we have some command-line arguments
    if (args->Length == 0) 
    {
        Console::Error->WriteLine(
            L"Error: not enough arguments.\n");
        return 1;
    }

    array<System::String ^> ^actualArgs;
    if(args[0][0] == L'@')
    {
        String^ text;
        StreamReader^ reader = gcnew StreamReader(args[0]->Substring(1));
        try
        {
            text = reader->ReadToEnd();
        }
        finally
        {
            delete reader;
        }
        actualArgs = text->Split(L'\n');
    }
    else actualArgs = args;

    for (int i = 0, n = actualArgs->Length; i < n; ++i)
    {
        String^ arg  = actualArgs[i];
        if (String::Equals(arg, L"-v"))
        {
            Console::WriteLine("Got -v !!!");
        }
    }

    return 0;
}

我正在参与竞选:

@args.txt

文件args.txt包含:

-v
... (more lines) ...

调试器告诉我,当执行循环over actualArgs时,realArgs [0] ==&#34; -v&#34;,所以我希望在控制台上看到&#34;得到-v !!!&# 34;,但这没有发生。我试图在该控制台输出语句中设置断点,它只是没有命中。但如果我通过&#34; -v&#34;在命令行上一切正常。 该代码在Visual Studio 2010中运行。 任何人都可以解释,发生了什么以及如何在这种情况下实现字符串平等工作?

1 个答案:

答案 0 :(得分:1)

你的行以\n结尾了吗?通常,行在Windows中以\r\n结尾。因此,当您仅删除\n时,每行末尾仍有不需要的\r

另外,我建议你使用静态方法File :: ReadAllLines()将整个文件读入字符串数组。它比你的代码更短更干净。