代码之家  ›  专栏  ›  技术社区  ›  Kristina

无法比较argv?

  •  5
  • Kristina  · 技术社区  · 15 年前

    我有这个密码:

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

    执行此代码时,会出现以下错误:

    错误的论点“-n”

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

    7 回复  |  直到 15 年前
        1
  •  14
  •   Jonathan Leffler    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);如果两个值相等,则函数返回零。

        2
  •  1
  •   dmckee --- ex-moderator kitten    15 年前

    这个 == 运算符不处理字符串的内容,因为字符串在此应用程序中实际上是字符指针,并且 指针 比较一下。

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

        3
  •  0
  •   peoro    15 年前

    你在比较指针( argv[i] 以及 "-n" 是一个 char* 以及 const char* ).

    使用 strcmp() 相反。

        4
  •  0
  •   user500944user500944    15 年前

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

        5
  •  0
  •   Ben Voigt    15 年前

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

        6
  •  0
  •   Jonas Kölker    15 年前

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

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

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

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

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

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

        7
  •  0
  •   Walery Strauch Lia    10 年前
    int equal(char* stringa, char* stringb) {
        while((*stringa) && (*stringb)) {
            if(*stringa!=*stringb)
                return FALSE;
            stringa++;
            stringb++;
        }
        return TRUE;
    }
    

    也为我工作

    推荐文章