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

また、ローカル関数の定義をメインの外に移動しました。

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 に答える