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