Аргументы индексов отсчитываются от 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 не является нулевым указателем.
Возвращает
¶8 Функции strtol, strtoll, strtoul и strtoull возвращают преобразованные
значение, если есть. Если преобразование не может быть выполнено, возвращается ноль. Если правильное значение
находится вне диапазона представимых значений, LONG_MIN, LONG_MAX, LLONG_MIN,
LLONG_MAX, ULONG_MAX или ULLONG_MAX возвращается (в соответствии с типом возврата
и знак значения, если оно есть), а значение макроса ERANGE хранится в errno.
Вы хотели бы убедиться, что все непустые символы были преобразованы, среди прочего.