C - 为什么此分段错误(核心转储)???int main (int argc, char *argv[]).


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

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

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

相关内容

最新更新