我正在对C ++中命令行传递的参数进行一些验证,并且遇到了一些困难。
我是这样做的
./a.exe inputfile.txt outputfile.txt 16 flush_left
我正在尝试像这样进行验证
if(argv[4] == "flush_left" || argv[4] == "flush_justify" || argv[4] == "flush_right"){
它没有按计划进行。虽然我没有看到为什么这不起作用。从我阅读和看过的所有内容都应该没问题
答案 0 :(得分:12)
尝试:
std::string argv4 = argv[4];
if(argv4 == "flush_left" || argv4 == "flush_justify" || argv4 == "flush_right"){
//...
}
或(未经测试):
if( argc >=4 && (!strcmp(argv[4],"flush_left") || !strcmp(argv[4],"flush_justify") || !strcmp(argv[4],"flush_right")) ) {
//...
}
argv [4]的类型为char*
,字符串文字的类型为const char*
,您无法使用==
运算符比较这些类型(=文本)的内容使用类似strcmp
或std::string
类的内容。
在==
上使用char*
比较变量的地址,而不是内容。
答案 1 :(得分:2)
./ a.exe inputfile.txt outputfile.txt 16 flush_left
基于零的argv为您提供: argv [0] = a.exe argv [1] = inputfile.txt argv [2] = outputfile.txt argv [3] = 16 argv [4] = flush_left
所以索引是正确的,但你应该使用strcmp(stringa,stringb)并确保返回0。