C ++:从命令行读取和比较

时间:2011-11-20 22:07:52

标签: c++ command-line compare arrays

我正在从命令行中读取一行,如下所示:

"./test -C original.txt compressed.txt"

变量-C也可以是-D(与声明它们的含义无关)。

我想在我的代码中验证它是这两个选项之一,但我在代码中使用argv[]字符数组时遇到了问题。

以下是我在if语句中尝试的内容:

if((strcmp(av[1], "-C") == 0)||(strcmp(av[1], "-c") == 0))

我也试过直接比较值

if((av[1] == "-C") || (av[1] == "-c"))

3 个答案:

答案 0 :(得分:2)

如果您使用的是c ++,最好使用std::string

if((std::string(argv[1]) == "-C") || (std::string(argv[1]) == "-c"))

如果它仍无法正常工作,请尝试打印变量并查看它是否符合预期。

答案 1 :(得分:1)

如果main()的原型是int main(int argc, char *argv[]);,那么在不使用std::string的情况下检查第一个参数是“-c”还是“-C”的正确方法是

if((strcmp(argv[1], "-C") == 0)||(strcmp(argv[1], "-c") == 0))
   // do things

您可能需要#include <cstring>才能使用strcmp()

答案 2 :(得分:0)

if((argv[1] == "-C") || (argv[1] == "-c"))

这不起作用,因为argv [1]指向包含第一个命令行参数的特定字符数组。在另一边“-c”是一个常量指针,指向包含“-C”的特定其他字符数组

因此,这不会比较那些指针实际指向的值,它会比较两个数组的地址,这些数组在我能想象的任何情况下都很可能会有所不同......