【问题标题】:How to properly compare command-line arguments?如何正确比较命令行参数?
【发布时间】:2015-02-16 00:04:15
【问题描述】:

我正在尝试编写一个在 main 中接受参数的 C 代码;因此,当我在 cmd 中编写一些字符串时,程序会在其中执行某些操作。但是我做错了,我找不到。

这是代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[]){   //File name is main.c
    if(argc != 3)
        printf("Wrong!!!!!!!!!");
    else
        if (argv[1] == "-s")
            girls();  //Prints "Girls"
        else if(argv[1] == "-k")
            boys();   //Prints "Boys"
        else
            printf("OMG!!");
}

在cmd中;

gcc -o gender main.c

gender -s pilkington

我输入了那个命令。但是输出总是

“天哪!!”

哪一部分错了?

【问题讨论】:

  • == 将比较指针的地址,而不是字符串的内容。

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


【解决方案1】:

在您的代码中,argv[1] == "-s" 是错误的部分。使用== 运算符无法进行字符串比较。

要比较字符串,需要使用strcmp()

你的代码应该是这样的

if ( ! strcmp(argv[1], "-s")) { //code here }

如果你想检查argv[1]是否包含"-s"

【讨论】:

    【解决方案2】:

    如果您检查argv[1] == "-s",则条件不成立。 因为它是一个字符串,所以你可以使用 strcmp 函数。

         if(( strcmp(argv[1],"-s")) == 0)
         girls();
         else if ((strcmp(argv[1],"-k")) == 0)
         boys();
    

    试试这个..

    【讨论】:

      【解决方案3】:

      您必须使用 strcmp 函数比较字符串。您不能简单地检查字符串 在相等运算符中。

        int strcmp(const char *s1, const char *s2);
      

      在你的代码中试试这个。

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

      【讨论】:

        【解决方案4】:

        使用 strcmp(s1,s2) 函数比较两个字符串。

                    if (strcmp(argv[1],"-s")==0)
                            girls();  //Prints "Girls"
                    else if(strcmp(argv[1],"-k")==0)
                            boys();   //Prints "Boys"
                    else
                            printf("OMG!!");
        

        【讨论】:

          猜你喜欢
          • 2022-10-23
          • 2011-04-08
          • 1970-01-01
          • 2021-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-11
          • 1970-01-01
          相关资源
          最近更新 更多