【问题标题】:How do I compare a char string with argv in C?如何在 C 中将 char 字符串与 argv 进行比较?
【发布时间】:2012-02-08 16:04:28
【问题描述】:

我正在尝试将字符串与 argv 参数进行比较。

我主要有这个:

int main(int argc, char *argv[]) 

现在如果我写

if (argv[2] == 'squared') 

IDE 告诉我我有一个多字符常量,或者 char* 对于它的类型或类似的东西来说太长了。

有没有办法将 argv 与字符串进行比较?我什至使用过 strcmp ,但是当程序运行时这给了我一个分段错误。

我也尝试了一个 for 循环并增加了 argv[i] 但这也给了我一个错误。

也许我错过了什么?

【问题讨论】:

标签: c


【解决方案1】:

使用 strcmp 和一个真正的字符串,而不是多字符常量。

strcmp(argv[2], "squared") == 0

【讨论】:

  • 没有理由使用strncmp。该标准规定"squared" 和argv[2] 都是以零结尾的字符串(假设argc 至少为3。)
  • 如果你想匹配整个字符串,strncmp 在其中一个字符串是字符串文字时是没有用的:)
  • 我确定我试过了,但我仍然遇到分段错误。如果我删除 strcmp,它不会发生。我会再试一次,看看我做错了什么。谢谢。我会在一段时间内回复你们。
  • @watabou 检查 argc 是否大于 2 否则你没有 argv[2]
  • 哦,是的,对不起,我的错。在工作中,我必须处理 1995 年的代码,有些人认为重新实现 operator[] 并执行 index - 1 会很棒,所以当你使用 str[1] 时,它会在索引 0 处获得 char ...现在很棒我被污染了
【解决方案2】:

试试 strcmp(3)。 在您的情况下,您必须使用 strcmp(argv[2], "squared"); 查看this 手册页了解更多信息。

【讨论】:

    【解决方案3】:

    您可以为此使用strcmp:

    if(strcmp(argv[2], "squared") == 0)  /* returns true if argv[2] is "squared" */
    

    【讨论】:

      【解决方案4】:

      strcmp()/*strncmp()* 是要走的路。并确保你的字符串是空终止的;)

      【讨论】:

        【解决方案5】:

        C 中的单引号仅用于单个字符,而不是字符串。所以你会为 a 字符写 'a',而为字符串写 "hello world"。

        顺便说一句,“a”和“a”之间是有区别的——“a”末尾有一个零终止符,所以它实际上是一个两个字符的字符串。这很重要,因为您必须记住 char 数组需要比您存储在其中的字符串长一个字符。

        要比较字符串,请使用 strcmp,如下所示:

        if (strcmp(argv[2], "squared") == 0)
        {
            //they are equal
        }
        

        【讨论】:

          猜你喜欢
          • 2019-02-27
          • 1970-01-01
          • 1970-01-01
          • 2012-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-04
          相关资源
          最近更新 更多