我正在从命令行中读取一行,如下所示:
"./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"))
答案 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”的特定其他字符数组
因此,这不会比较那些指针实际指向的值,它会比较两个数组的地址,这些数组在我能想象的任何情况下都很可能会有所不同......