将char *与char进行比较

时间:2015-04-26 07:52:22

标签: c char compare

我正在开发一个程序,我在命令行中从输入中获取文件的名称。我需要检查输入是否是给定的字符说" - "并根据此结果使用该文件,但我不太清楚如何做到这一点。我尝试过的方法似乎在逻辑上有意义,只是检查是否

argv[1] == "-";

总是返回零,即使我写'" - "在命令输入中。我该怎么办?

3 个答案:

答案 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系列的功能完成的。