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

无法解决此C条件失败的原因

c
  •  0
  • Ash  · 技术社区  · 14 年前

    作为大学作业的一部分,我写的一些C代码有问题。考虑一下代码:

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

    现在: printf("%s\n", argv[1]); “指纹”--冗长“所以我知道 argv[1] == "--verbose" 应该是真的,但是 printf("%d\n", argc); 决不执行。我也不知道为什么。有什么想法吗?

    5 回复  |  直到 14 年前
        1
  •  9
  •   Matthew Flaschen    14 年前

    使用 strcmp 功能:

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

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

        2
  •  3
  •   Dean Taylor    14 年前

    参考 Wikipedia Article on strcmp .

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

        3
  •  1
  •   Alex Budovski    14 年前

    因为在C中不能将字符串与==进行比较。请使用strcmp或类似的方法。

        4
  •  1
  •   vpit3833    14 年前

    你不应该用 strcmp 比较字符串?当然 argv[1] == "--verbose" 不会比较字符串与字母的相等性。

        5
  •  0
  •   thkala jaxb    12 年前

    在代码中,您实际上是在比较 argv[1] 指针(指向包含程序第一个参数的字符串),每个字符串文本的地址(“-v”等)。这在任何情况下都是假的。

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