我正在尝试按照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中运行。 任何人都可以解释,发生了什么以及如何在这种情况下实现字符串平等工作?
答案 0 :(得分:1)
你的行以\n
结尾了吗?通常,行在Windows中以\r\n
结尾。因此,当您仅删除\n
时,每行末尾仍有不需要的\r
。
另外,我建议你使用静态方法File :: ReadAllLines()将整个文件读入字符串数组。它比你的代码更短更干净。