1
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

我得到一个分段错误,为什么?

4

1 回答 1

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.

于 2014-03-05T04:31:58.640 回答