为什么这个分段错误(核心转储)??? int main(int argc,char * argv [])

时间:2014-03-05 04:27:47

标签: c if-statement segmentation-fault argc

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

我遇到了分段错误,为什么?

1 个答案:

答案 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上放置常量。