C语言 比较字符*和字符



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

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

相关内容

  • 没有找到相关文章

最新更新