等于在 C++ 中返回 false
Equals returning false in c++
我是 cpp 的新手,我正在尝试做一个项目。它说代码必须将文件名作为参数,并且将 运行 by:
./main -i filename
我已经编写了一个 for 循环,它将遍历参数列表以找到“-i”参数,以便我可以确定文件名。但是这一行总是 return false:
argv[i] == "-i"
下面是我的代码:
#include <string>
#include <iostream>
int main(int argc, char *argv[]) {
std::string test = argv[0];
for(int i = 0; i < argc; i++){
if(argv[i] == "-i"){
test = argv[i+1];
break;
}
}
std::cout << test;
return 1;
}
argv[i] == "-i"
在上面的行中,您分别比较了两个指针:char*
和 const char*
。
换句话说,不是比较 argv[i]
和 "-i"
而是比较两个几乎不可能指向同一位置的指针。因此,该检查对您的情况无效。
您可以通过多种方式修复它,例如将 "-i"
包装到 std::string
中以使比较正常工作:
const auto arg = std::string{ "-i" };
for(int i = 0; i < argc; i++){
if(argv[i] == arg){
test = argv[i+1];
break;
}
}
从 C++17 开始,您还可以使用 std::string_view
:
const std::string_view sv{ "-i" };
for(int i = 0; i < argc; i++){
if(argv[i] == sv){
test = argv[i+1];
break;
}
}
这是一种更好的方式,因为它避免了 std::string
创建。
您不能使用 ==
将指向 char
的指针与字符串文字 (char const*
) 进行比较。使用 std::strcmp()
(<cstring>
) 或从中构造一个 std::string
(<string>
) 使其与使用 ==
的 char*
相当。
试试这个:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]) {
string test;
for(int i = 0; i < argc; i++){
cout << "\n" << argv[i] << endl;
if((string)argv[i] == "-i"){
test = argv[i + 1];
cout << "test= " << test << endl;
break;
}
}
cout << test << endl;
system("pause");
return 0;
}
我是 cpp 的新手,我正在尝试做一个项目。它说代码必须将文件名作为参数,并且将 运行 by:
./main -i filename
我已经编写了一个 for 循环,它将遍历参数列表以找到“-i”参数,以便我可以确定文件名。但是这一行总是 return false:
argv[i] == "-i"
下面是我的代码:
#include <string>
#include <iostream>
int main(int argc, char *argv[]) {
std::string test = argv[0];
for(int i = 0; i < argc; i++){
if(argv[i] == "-i"){
test = argv[i+1];
break;
}
}
std::cout << test;
return 1;
}
argv[i] == "-i"
在上面的行中,您分别比较了两个指针:char*
和 const char*
。
换句话说,不是比较 argv[i]
和 "-i"
而是比较两个几乎不可能指向同一位置的指针。因此,该检查对您的情况无效。
您可以通过多种方式修复它,例如将 "-i"
包装到 std::string
中以使比较正常工作:
const auto arg = std::string{ "-i" };
for(int i = 0; i < argc; i++){
if(argv[i] == arg){
test = argv[i+1];
break;
}
}
从 C++17 开始,您还可以使用 std::string_view
:
const std::string_view sv{ "-i" };
for(int i = 0; i < argc; i++){
if(argv[i] == sv){
test = argv[i+1];
break;
}
}
这是一种更好的方式,因为它避免了 std::string
创建。
您不能使用 ==
将指向 char
的指针与字符串文字 (char const*
) 进行比较。使用 std::strcmp()
(<cstring>
) 或从中构造一个 std::string
(<string>
) 使其与使用 ==
的 char*
相当。
试试这个:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]) {
string test;
for(int i = 0; i < argc; i++){
cout << "\n" << argv[i] << endl;
if((string)argv[i] == "-i"){
test = argv[i + 1];
cout << "test= " << test << endl;
break;
}
}
cout << test << endl;
system("pause");
return 0;
}