读取C程序中的命令行参数

时间:2011-04-16 19:06:44

标签: c command-line-arguments

这样做是将参数./a.out -b 101转换为小数5,但我想要做的只是将101转换为二进制数,如果我给它参数-b

#include <stdio.h>
void main(int argc, char *argv[])
{
  if ((argc == 3) && (argv[2] == "-b") ) //here lies the problem
  {
    int n = 0;
    char *c_pt = argv[2];

    printf("argv[1]: %s\n", argv[1]);
    while (*c_pt)
    {
      if (*c_pt < '0' || *c_pt > '1')
      {
        break;
      }
      n = n * 2 + *c_pt - '0';
      c_pt++;
    }
    printf("%d\n", n);

  }
}

3 个答案:

答案 0 :(得分:3)

在C语言中,您需要调用strcmp(3)来比较字符串。

答案 1 :(得分:2)

参数索引从0开始计算,并带有程序名称。 argv[1]包含字符串"-b",而argv[2]包含字符串"101"

此外,您需要#include <string.h>并使用strcmp()来比较字符串。

在内部,无论您如何转换,数字都将是二进制数。但是,没有一种简单的方法可以在C中打印二进制数。您可以使用strtol()(来自<stdlib.h>)或其中一个亲属将字符串转换为二进制值。您应该使用它将字符串转换为值(但是,通常,您需要非常小心地从strtol()检测错误条件;它的返回值很微妙。)

  

7.20.1.4 strtol,strtoll,strtoul和strtoull函数

long strtol(const char * restrict nptr, char ** restrict endptr, int base);
     

¶7如果主题序列为空或者没有预期的形式,则不进行转换   执行; nptr的值存储在endptr指向的对象中,提供   该endptr不是空指针。

     

返回

     

¶8strtol,strtoll,strtoul和strtoull函数返回转换后的函数   价值,如果有的话。如果无法执行转换,则返回零。如果值正确   超出可表示值的范围,LONG_MIN,LONG_MAX,LLONG_MIN,   返回LLONG_MAX,ULONG_MAX或ULLONG_MAX(根据返回类型   和值的符号,如果有的话),宏ERANGE的值存储在errno中。

您需要确保转换所有非空白字符,以及其他内容。

答案 2 :(得分:1)

#include <stdio.h>

void main(int argc, char *argv[])
{
    if ((argc == 3) && (0 == strcmp(argv[1], "-b")) ) //here lies the problem
    {
        int n = 0;
        char *c_pt = argv[2];

        printf("argv[2]: %s\n", argv[2]);
        while (*c_pt)
        {
            if (*c_pt < '0' || *c_pt > '1')
            {
                break;
            }
            n = n * 2 + *c_pt - '0';
            c_pt++;
        }
        printf("%d\n", n);

    }
}

尽管我的版本宁愿使用

char* end;
printf("%li\n", strtol(argv[2], &end, 2));