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;
}