我正在开发一个程序,我在命令行中从输入中获取文件的名称。我需要检查输入是否是给定的字符说" - "并根据此结果使用该文件,但我不太清楚如何做到这一点。我尝试过的方法似乎在逻辑上有意义,只是检查是否
argv[1] == "-";
总是返回零,即使我写'" - "在命令输入中。我该怎么办?
答案 0 :(得分:3)
你需要写
strcmp(argv[1],"a")==0;
在您的示例中,您比较了两个指针,而不是两个字符串。
在编译时,编译器声明" a"在内存中的某个地方,然后在编译时用它的内存地址替换它。因为argv [1]不能与(临时)" a"真正坐在同一个字节上,结果总是错误的。
你需要遍历两个字符串并迭代地比较每个字符。
strcmp
比较2个字符串,如果它们以这种方式完全相等则返回0。
有关strcmp
的更多信息:http://www.cplusplus.com/reference/cstring/strcmp/
为了处理多个字符,您可以放置一些if-else'
if (strcmp(argv[1],"-")==0){
minus_character_handling_function();
} else if (strcmp(argv[1],"+")==0){
plus_character_handling_function();
} else if (strcmp(argv[1],"a")==0){
a_character_handling_function();
}
答案 1 :(得分:1)
表达式argv[1]
是(以null结尾的)字符数组的地址。
表达式"-"
是另一个(以null结尾的)字符数组的地址。
这些地址不相等,因此表达式argv[1] == "-"
始终为false。
也就是说,这是一种检查输入是否为给定字符的替代方法:
if (argv[1][0] != 0 && argv[1][1] == 0)
{
switch (argv[1][0])
{
case '-':
...
break;
case '+':
...
break;
case '=':
...
break;
...
}
}
答案 2 :(得分:0)
做这个检查:
argv[1] == "-";
您正在比较地址,其中包含命令行的第一个参数,以及您程序中文字"-"
的地址 ,它们是不同的,所以这就是你的测试失败的原因。您实际上想要比较由这两个地址启动的内存位置中包含的字符,这是通过strcmp
系列的功能完成的。