5

我有这个代码:

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

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

不好的论点'-n'

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

4

7 回答 7

15

字符串比较需要 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);如果两个值相等,则为零。

于 2010-11-21T17:54:28.770 回答
1

==运算符不适用于字符串的内容,因为在此应用程序中字符串实际上是字符指针,并且指针会进行比较。

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

于 2010-11-21T17:55:28.877 回答
0

您正在比较指针(argv[i]and of"-n"是 achar*和 a const char*)。

改为使用strcmp()

于 2010-11-21T17:55:39.730 回答
0

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

于 2010-11-21T17:55:48.847 回答
0

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

于 2010-11-21T17:56:39.547 回答
0

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

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

不同整数(和非整数数字)类型的值会进行一些转换。见别处。

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

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

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

于 2010-11-21T17:57:47.873 回答
0
int equal(char* stringa, char* stringb) {
    while((*stringa) && (*stringb)) {
        if(*stringa!=*stringb)
            return FALSE;
        stringa++;
        stringb++;
    }
    return TRUE;
}

也为我工作

于 2015-10-05T14:48:14.410 回答