>我正在开发一个程序,从命令行的输入中获取文件名。我需要检查输入是否是给定字符说"-"并根据此结果处理文件,但我不太确定该怎么做。我尝试过的方法,在逻辑上似乎是有意义的,只是检查是否
argv[1] == "-";
总是返回零,即使我在命令输入中写了"-"。我能做什么?
你需要写 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();
}
表达式 argv[1]
是(以 null 结尾的)字符数组的地址。
表达式 "-"
是另一个(以 null 结尾的)字符数组的地址。
这些地址不相等,因此表达式argv[1] == "-"
总是假的。
也就是说,这里有一种检查输入是否为给定字符的替代方法:
if (argv[1][0] != 0 && argv[1][1] == 0)
{
switch (argv[1][0])
{
case '-':
...
break;
case '+':
...
break;
case '=':
...
break;
...
}
}
通过执行以下检查:
argv[1] == "-";
您正在比较包含命令行 firrst 参数的地址和程序中文字"-"
的地址,它们是不同的,因此这就是测试失败的原因。您实际上想要比较由这两个地址开头的内存位置中包含的字符,这是通过strcmp
系列的功能完成的。