main形参argv数组传参异常,如何解决?(语言-c语言)

argv传参时发生错误,定义了一个函数处理命令行字符串没有成功。

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

int bstoi(char *st);
void bprint(int num, char* num1);

int main(int argc, char *argv[])
{
    int numb_1, numb_2;
    int i;
    char num1[65];
    char ar[30];
    strcpy(ar, argv[1]);
    numb_1 = bstoi(ar);

    i = ~numb_1;
    bprint(i, num1);
    printf("is the result of ~%s.", ar);
    
    return 0;
}


void bprint(int num, char *num1) {
    int count = 0;
    while (num != 0 && count <65)
    {
        *num1++ = num % 2 + '0';
    }
    *num1 = '\0';

    printf("%s", num1);
    ++count;

    return;
}

int bstoi(char *st) {
    int sum = 0;
    while (*st != '\0') {
        sum *= 2;
        if(*st != '0' && *st != '1'){
            printf("The argument shoule be binary. \n");
            break;
        }
        sum += *st - '0' ;
        st++;
    }
    return sum;
}

测试报错:
gcc:307 segmentation fault (core dumped)

输入的命令行:./15-2 0011 1101

        if(*st != '0' && *st != '1'){
            printf("The argument shoule be binary. \n");
            exit(EXIT_FAILURE);
        }

经过思考,我怕是命令行读取错误,就在bstoi函数里加了一个测试单元,最后输出的结果是:The argument shoule be binary.
说明程序调用到这里一直没问题,但是命令行字符串错了,不知道具体什么原因,还望指点,感谢!

exit(EXIT_FAILURE); ----->return (EXIT_FAILURE);在mai()函数中还可以用,否则是直接退出程序 ,而 不是退出函数。
sum += (*st)++ - '0'; ------> sum += (*st++ )- '0' 或者 sum += *st - '0' ; st++;

这个不是传值的问题,是你的函数有段错误,我大概改了下,不太理解你的程序的思想,大概改了下,对比下代码,有问题可以一起交流

#include<stdio.h>

#include<stdlib.h>

 

int bstoi(char *st);
void bprint(int num, char* num1);

int main(int argc, char *argv[])
{

    int numb_1, numb_2;
    int i;
    char num1[65] = {};
    numb_1 = bstoi(argv[1]);

    i = ~numb_1;
    printf("~%d result is:", numb_1);
    bprint(i, num1);

    return 0;
}

void bprint(int num, char *num1) {
    int count = 0;
    while (num != 0 && count <65)
    {
        *(num1 + count ) = num % 2 + '0';
        count ++;
    }

    *num1 = '\0';
    printf("%s\n", num1);
    ++count;
    return;
}

int bstoi(char *st) {
    int sum = 0;
    while (*st != '\0') {
        sum *= 2;
        if(*st != '0' && *st != '1'){
            printf("The argument shoule be binary. \n");
            exit(EXIT_FAILURE);
        }
        sum += (*st) - '0';
        st++;
    }
    return sum;
}