int main (int argc, char *argv[])
{
int a, b, quo, rest;
void division(int dividendo, int divisor, int *ptr_quociente, int *ptr_resto)
{
*ptr_quociente=dividendo/divisor;
*ptr_resto=dividendo%divisor;
}
if(argc=3)
{
a= atoi(argv[1]);
b= atoi(argv[2]);
division(a,b,&quo,&rest);
printf(" %d and %d \n",quo,rest);
}
else if (argc=1)
do
{
printf("type two int numbers:\n");
scanf("%d %d", &a, &b);
division(a,b,&quo,&rest);
printf(" %d and %d \n",quo,rest);
} while(a!=0);
}
如果我这样做:
./ program.c 12 6
它有效,但如果我这样做:
./ program.c
我遇到了分段错误,为什么?
答案 0 :(得分:2)
if(argc=3) should be if(3 == arc) //notice '=='
这就是为什么将constant
放在LHS
上始终是个好主意,这样可以避免意外分配
与arc=1
另外,我在main之外移动了本地函数定义。
void division(int dividendo, int divisor, int *ptr_quociente, int *ptr_resto)
{
*ptr_quociente=dividendo/divisor;
*ptr_resto=dividendo%divisor;
}
int main (int argc, char *argv[])
{
...
}
编辑:在阅读了Paxdiablo和Shafik的评论之后,我发现大多数现代编译器会在条件下警告'='
。您可以简单地写if(argc == 3)
而不是在LHS
上放置常量。