比较 char* 和 char

Comparing char* with char

我正在开发一个程序,从命令行输入中获取文件名。我需要检查输入是否是一个给定的字符说“-”并根据这个结果处理文件,但我不太确定该怎么做。我试过的方法,在逻辑上似乎是有道理的,只是检查 if

argv[1] == "-";

总是returns零,即使我在命令输入中写“-”也是如此。我能做什么?

你需要写 strcmp(argv[1],"a")==0;

在您的示例中,您比较了两个指针,而不是两个字符串。
编译时,编译器在内存中的某处声明 "a" ,然后在编译时用它的内存地址替换它。由于 argv[1] 不能真正与 (temporary) "a" 位于同一字节,因此结果始终为假。 您需要遍历两个字符串并迭代比较每个字符。 strcmp 比较 2 个字符串和 return 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] == "-";

您正在比较包含命令行第一个参数的 地址 地址 "-" 你的程序中有,它们是不同的,所以这就是你的测试失败的原因。您实际上想比较由这两个地址开始的内存位置中包含的字符,这是由 strcmp 系列的功能完成的。

表达式 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;
    ...
    }
}