【问题标题】:How to compare string command line arguments in C?如何比较C中的字符串命令行参数?
【发布时间】:2014-12-25 08:57:18
【问题描述】:

对不起,我是 C 的菜鸟。我要做的只是在将 --help 参数输入到终端(如./program --help)时打印一些东西。所以代码是这样的:

char *HELP = "--help";
char *argv1 = argv[1];

if (argv1 == HELP) {
    printf("argv[1] result isaa %s\n", argv[1]);
}

因此,即使我使用 --help 参数,它也不会通过 if 条件。那么这背后的原因可能是什么?

【问题讨论】:

  • 请注意,无论何时调用函数,都必须包含不同的 .h 文件。因此,您可以通过输入命令man strcmp 来回答您在下面关于warning: implicit declaration of function ‘strcmp’ 的问题,该命令将告诉您您的函数定义在哪个文件中,因此需要包含在内。 (如果您的操作系统不是基于 *nix 的,只需 google 'man strcmp' 即可获得相同的信息)

标签: c pointers command-line-arguments string-comparison


【解决方案1】:

这不是您在 C 中比较字符串的方式。请使用 strcmpstrncmp

if (strcmp(argv1, HELP) == 0)

包括 string.h 以访问这些内容。

【讨论】:

  • 警告:函数‘strcmp’的隐式声明[-Wimplicit-function-declaration]
  • @SarpKaya #include <string.h>
  • 对于初学者来说,(在我看来)与 0 进行比较比使用 ! 运算符要清楚得多。
【解决方案2】:

这是比较地址,而不是内容。使用strcmp()

if (0 == strcmp(HELP, argv1))
{
    printf("argv[1] result isaa %s\n", argv[1]);
}

在访问argv[1] 之前,请务必检查argc > 1

【讨论】:

    【解决方案3】:

    在 C 中,没有字符串类型。您已声明 char *HELP,因此 HELP 是 char *,而不是字符串。在 if 中,您正在比较两个指针,而不是它们指向的字符串。 您将需要调用strcmp(字符串比较),该函数接收两个char *,并比较它们指向的字符串。

    【讨论】:

      【解决方案4】:

      你应该使用 strcmp。

      result=strcmp(argv1,HELP);
      if(result==0)
      {
          --what you want
      }
      

      【讨论】:

        【解决方案5】:

        char *HELP = "--help"; - 这里--help 是一个字符串文字,它是文本段中的只读数据。您只是将地址分配给指针变量HELP

        `argv[1] 会给你存储第一个命令行参数的地址。

        所以argv[1]HELP 有不同的地址。所以条件(argv[1] == HELP)只是检查存储在这两个指针变量中的地址。这总是会失败。

        其实你要比较这两个先驱者的内容。为此,您可以使用字符串比较逻辑或使用strcmp 函数。

        if (0 == strcmp(argv[1], HELP)
        {
            //do your stuff
        }
        

        【讨论】:

          【解决方案6】:

          我有同样的问题。我的问题已通过使用 strncmp 解决。
          strcmp 无论如何都无法解决我的问题

          #include <string.h>
          
          
              if (strncmp(argv1, HELP,6) == 0) //6 is size of argument
              {
              //do smt
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-08
            • 1970-01-01
            • 1970-01-01
            • 2021-08-19
            • 2022-10-23
            • 2013-08-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多