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);
}

if I do:

./program.c 12 6

it works but if I do:

./program.c

I get a segmentation fault, why?

2
  • argc=3 should be argc==3 Commented Mar 5, 2014 at 4:29
  • thank you! i should have seen it, kind of tired... Commented Mar 5, 2014 at 4:39

1 Answer 1

2
 if(argc=3) should be if(3 == arc) //notice '=='

That's why it is always good idea to keep constant on LHS, this will avoid accidental assignment

Same with arc=1

Also, I moved local function definition outside 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[])

{
...
}

Edit: After reading comments from Paxdiablo and Shafik, I came to know most modern compiler would warn for '=' in condition. You can simply write if(argc == 3) rather than placing constant on LHS.

Sign up to request clarification or add additional context in comments.

3 Comments

Bah, that's what I like to call "butt-ugly format", especially since modern compilers can warn about assignments within conditionals. But +1 anyway since you found the problem, even as I laugh derisively at your solution :-)
@paxdiablo Shafik, yes kind of agree, as it is defensive programming than anything else. if(arc == 3) should be fine.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.