这样做是将参数./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);
}
}
答案 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));