#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (argv[1]=="-r") cout << "success\n";
}
“成功”不会打印出来。我跑的时候:$ ./hearts -r 唯一出现的是:
-r
这让我很困惑
答案 0 :(得分:3)
我要继续告诉你,你不想strcmp
。处理命令行参数的C ++方法是尽快将它们转换为std::string
:
int main(int argc, const char* argv[])
{
// Make a vector of all command-line arguments
std::vector<std::string> args(argv, argv+argc);
// Now we can use std::string's operator==
if (args.size() > 1 && args[1] == "-r") {
std::cout << "Success" << std::endl;
}
return 0;
}
您可以将两个std::string
与==
运算符进行比较。对于args[1] == "-r"
,const char[]
字符串文字将转换为std::string
进行比较。在你的代码中,argv[1]=="-r"
比较了两个不相等的独立指针 - 它不会比较C风格字符串的内容。
答案 1 :(得分:2)
那是因为你在两个指针上使用==
。它将检查指针是否相等,而不是指向相同数据点。
要比较两个C字符串,请使用strcmp
,如下所示:
if (strcmp(argv[1], "-r") == 0)
答案 2 :(得分:1)
您可能希望strcmp
比较两个字符串。要使==
为真,您的两个字符串必须引用相同的内存位置,这是不可能发生的,因为"-r"
是编译时常量。
答案 3 :(得分:1)
您应该使用strcmp()
,它将按预期工作。当你使用==
比较指针时,它们不能相同。
答案 4 :(得分:1)
你应该尝试使用:
if (strcmp(argv[1],"-r")==0) cout << "success\n";
将参数与字符串文字进行比较。
答案 5 :(得分:1)
在C中,string是字符数组(指向字符序列的指针)。在您的代码中,相等运算符只是比较两个指针值,它们完全不同。您应该使用strcmp
函数,或使用string
class:
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <cstring> // <-- here
using namespace std;
int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (strcmp(argv[1], "-r") == 0) // <-- and here
cout << "success\n";
}
OR
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <string> // <-- here
using namespace std;
int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (string(argv[1]) == "-r") // <-- and here
cout << "success\n";
}