无法比较argv?

时间:2010-11-21 17:52:51

标签: c argv

我有这段代码:

if (argv[i] == "-n") 
{
    wait = atoi(argv[i + 1]);
}
else 
{
    printf("bad argument '%s'\n",argv[i]);
    exit(0);
}

执行此代码时,我收到以下错误:

  

坏参数'-n'

我真的不知道为什么会这样。有人可以解释一下吗?

7 个答案:

答案 0 :(得分:14)

字符串比较需要C中的函数 - 通常strcmp()来自<string.h>

if (strcmp(argv[i], "-n") == 0) 
{
    wait = atoi(argv[i + 1]);
}
else 
{
    printf("bad argument '%s'\n",argv[i]);
    exit(0);
}

如果第一个参数在第二个参数之前排序,则strcmp()函数返回负值(不一定是-1);如果第一个参数在第二个参数之后排序,则为正值(不一定为+1);如果两个值相等则为零。

答案 1 :(得分:1)

==运算符不能处理字符串的内容,因为字符串在此应用程序中是有效的字符指针,并且指针会被比较。

要比较字符串的内容,请使用strcmpstrncmp

答案 2 :(得分:0)

您正在比较指针(argv[i]"-n"char*const char*

改为使用strcmp()

答案 3 :(得分:0)

你在这里做的是指针比较。 argv [i]不是字符串,它是指向内存中实际字符串开始的位置的指针。使用strcmp()。

答案 4 :(得分:0)

您正在比较指针,而不是字符串内容。 argv[i]"-n"是两个不同的字符串,存储在内存中的两个不同位置,即使字符串中的字符相等也是如此。

答案 5 :(得分:0)

在C中,运算符==比较相等。

以直接的方式比较相同数值类型的值(即2 + 2 == 4为真)。

不同整数(和非整数数字)类型的值经历一些转换。见其他地方。

如果指向同一地址,则指针相等。

字符串文字放在内存中,不与任何其他东西重叠;包括不重叠argv [i]指向的任何东西(对于i = 0到argc)。

所以你要比较两个不等的指针;这就是为什么。您想使用if (!strcmp(argv[i], "-n")) { ... }

答案 6 :(得分:0)

int equal(char* stringa, char* stringb) {
    while((*stringa) && (*stringb)) {
        if(*stringa!=*stringb)
            return FALSE;
        stringa++;
        stringb++;
    }
    return TRUE;
}

也在为我工作