2010-11-24 31 views
0

我正在编写一些C代码作为大学作业的一部分。考虑代码:不能锻炼为什么这个C条件不成功

printf("%s\n", argv[1]); 
if ((argv[1] == "--verbose") || (argv[1] == "-v")) { 
    printf("%d\n", argc); 
} 

现在:printf("%s\n", argv[1]);打印“--verbose”所以我知道应该argv[1] == "--verbose"是真实的,但行printf("%d\n", argc);从未执行。我无法锻炼为什么。有任何想法吗?

+1

以这种方式使用`==`来比较字符串的*位置*,而不是它们的内容。 – caf 2010-11-24 01:35:04

回答

9

使用strcmp功能:

strcmp(argv[1], "--verbose") == 0 

==检查这两个指针具有相同的地址,这是不是你想要的。

+1

现货,接受并继续! – 2010-11-24 01:26:58

1

因为你不能在C中用==比较字符串。使用strcmp或类似的。

1

您不应该使用strcmp来比较字符串吗?当然,argv[1] == "--verbose"不会比较字符串与字母的平等。

3

参照Wikipedia Article on strcmp

这里的关键是你不能直接比较字符串与在C中的==运算符。这只会比较字符串的指针,这将是不同的。

0

在你的代码中,你实际上是将argv[1]指针(指向包含程序第一个参数的字符串)的内容与每个字符串的地址(“-v”等)进行比较。这在所有情况下都保证是错误的。

您应该使用strcmp()函数或类似函数来比较字符串本身,而不是它们的地址。