C if语句中argv的奇怪问题

C if语句中argv的奇怪问题,c,if-statement,string-comparison,argv,C,If Statement,String Comparison,Argv,我的一个C程序中的if语句中的argv有问题。我知道我一定错过了一些简单而愚蠢的东西(我已经有一段时间没有用C语言做过任何事情了)。问题是,如果我在命令行中没有指定其他内容,它将不会doOtherStuff()。即使我这样做。/a.out-I它仍然运行doStuff()。有人看到这里遗漏了什么吗?提前非常感谢 int main(int argc, char *argv[]) if(argv[1] == "-a" || "-A") { doStuff();

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

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

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

如果要在C中比较字符串,必须使用strcmp之类的方法:


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

您要比较C字符串和相等运算符(
=

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

比如:

#包括
int main(int argc,char*argv[])
{
如果(strcmp(argv[1],“-a”)==0 | | strcmp(argv[1],“-a”)==0)
{
doStuff();
}
其他的
{
doOtherStuff();
}
}

请注意,字符串比较是编程中最基本的操作之一,您的
if
语句也不正确。如果你还没有开始做,试着多读一些基础知识。

哦,糟了。我完全忘记了。谢谢如果您好奇的话,总是调用
doStuff()
的原因是因为
|
的使用不正确:子句
argv[1]=“-a”
总是会失败,因为它不是比较字符串的有效方法,而且指向每个字符串的指针永远不会相同。但是,单独的
“-A”
将始终为true,因为它有一个非零地址,这意味着您的
if
语句将始终作为一个整体计算为true。
#include <string.h>

int main(int argc, char *argv[])
{
    if(strcmp(argv[1], "-a") == 0 || strcmp(argv[1], "-A") == 0)
    {
        doStuff();
    }
    else
    {
        doOtherStuff();
    }
}