所以我尝试检查我在程序中输入的参数,其中一个是单词"yes“或"no",输入时没有引号。
我正在尝试测试等价性( if (argvn == "yes") ),但似乎每次输入为yes时都返回false (当我输出它时证实了这一点)。我在这里错过了什么,我做得不对吗?如果我理解正确的话,argvn会返回一个以null结尾的cstring,所以它应该允许我这样做。
发布于 2011-03-04 00:01:05
你在比较指针。使用strcmp或std::string。
int main(int argc, char * argv[]) {
if (argv[1] == "yes"); // Wrong, compares two pointers
if (strcmp(argv[1], "yes") == 0); // This compares what the pointers point to
if (std::string(argv[1]) == "yes"); // Works fine
if (argv[1] == std::string("yes")); // Works fine
// Easy-mode
std::vector<std::string> args(argv, argv+argc);
for (size_t i = 1; i < args.size(); ++i) {
if (args[i] == "yes") {
// do something
}
}
}
发布于 2017-03-18 02:36:06
这里有一个比std::string更好的选择,当效率很重要的时候--在C++17中,你现在有了非常有用的std::string_view。这使您可以使用类似于std::string的参数,而不会产生复制成本。
目前在std::experimental中提供,在GCC:
#include <experimental/string_view>
...
if(std::experimental::string_view(argv[1]) == "yes") {
// do things
}
发布于 2011-03-04 00:03:39
if(strcmp(argv[0],"yes")==0) { // equal to "yes"
如果两个字符串相同,则strcmp为零。
https://stackoverflow.com/questions/5183203
复制相似问题