【问题标题】:Weird Issue With argv in if statementif语句中argv的奇怪问题
【发布时间】:2025-12-26 20:45:12
【问题描述】:

我在我的一个 C 程序中的 if 语句中遇到了 argv 问题。我知道我一定遗漏了一些简单而愚蠢的东西(我已经有一段时间没有用 C 语言做过任何事情了)。问题是,如果我在命令行上没有指定其他内容,它不会 doOtherStuff() 。即使我执行 ./a.out -i 它仍然运行 doStuff()。有谁看到这里可能缺少什么?非常感谢您!

int main(int argc, char *argv[])

    if(argv[1] == "-a" || "-A")
    {
       doStuff();
    }
    else
    {
        doOtherStuff();
    }
}

【问题讨论】:

    标签: c if-statement string-comparison argv


    【解决方案1】:

    您正在将 C 字符串与 相等运算符 (==) 进行比较。

    您必须改用strcmp 函数(在string.h 中定义)。

    喜欢:

    #include <string.h>
    
    int main(int argc, char *argv[])
    {
        if(strcmp(argv[1], "-a") == 0 || strcmp(argv[1], "-A") == 0)
        {
            doStuff();
        }
        else
        {
            doOtherStuff();
        }
    }
    

    请注意,字符串比较是编程中最基本的操作之一,您的if 语句也不正确。如果您还没有这样做,请尝试阅读有关基础知识的更多信息。

    【讨论】:

      【解决方案2】:

      如果你想在 C 中比较字符串,你必须使用 strcmp 之类的方法:http://www.cplusplus.com/reference/cstring/strcmp/

      在 C 中,字符串实际上是一个字符数组,因此您正在比较 2 个数组的内存地址(由于它们是不同的数组,所以当然会有所不同)。

      【讨论】:

      • 哦,呵呵。我完全忘记了这一点。谢谢!
      • 如果你很好奇,doStuff() 总是被调用的原因是因为 || 的错误使用:子句 argv[1] == "-a" 总是会失败,因为它不是一个有效的方法比较字符串,指向每个字符串的指针永远不会相同。但是,单独的 "-A" 将始终为真,因为它有一个非零地址,这意味着您的 if 语句将始终评估为真的作为一个整体。