C Programming - Command Line Arguments - Discussion

Discussion Forum : Command Line Arguments - Find Output of Program (Q.No. 3)
3.
What will be the output of the program (sample.c) given below if it is executed from the command line (Turbo C in DOS)?
cmd> sample 1 2 3
/* sample.c */
#include<stdio.h>

int main(int argc, char *argv[])
{
    int j;
    j = argv[1] + argv[2] + argv[3];
    printf("%d", j);
    return 0;
}
6
sample 6
Error
Garbage value
Answer: Option
Explanation:

Here argv[1], argv[2] and argv[3] are string type. We have to convert the string to integer type before perform arithmetic operation.

Example: j = atoi(argv[1]) + atoi(argv[2]) + atoi(argv[3]);

Discussion:
14 comments Page 1 of 2.

Ranjit Singh said:   1 decade ago
Can any describe it how the error will generate?

Brindha said:   1 decade ago
Instead of arg[1] atoi(arg[1]) is to be put.

argv[1] will contain "1" (as string), we have to convert into integer with atoi() function.

Bhagat singh said:   1 decade ago
argv[3] is not declare automatically
so we never used argv[3]

The prodigy said:   1 decade ago
The command line arguments are taken as strings (char *) and not integers.

Sweety said:   1 decade ago
@Brindha : perfect

Navneet said:   1 decade ago
argv is argument vector and it is string. here it is tried to concatenate string. C does not provide the string concatenation it this way. So that error!

Kavtihha said:   1 decade ago
I'm getting the error even if I put atoi() function. What to do?

Mukesh said:   1 decade ago
All the confusion accounts to the generosity of our loveable C compiler. The C standard says "standard conversions" but never defines an upper boundary for the conversions. Hence the compiler is let loose - it tries and performs all sorts of conversions and when successful(which it always is!!) says "Fine fine the program has no errors - yeah but this is a warning... "
For example, int a = "1";
"1" is a char*, so the RHS is an address to the string. The compiler converts this address to an integer and assigns it to int.
But the problem is the binary operator : +
The + operator has been defined to work only with a predefined set of types, and not to work on a predefined set of types. For instance, C standard says Ok + operator, you can work on integers, floats, doubles, blah.. but you shouldnt work on two pointers(since I forbid arithmetic operations with two pointers).
So if you write :
int j = argv[1] + 2; // WARNING, NO ERROR
int k = argv[1] + "2"; // 2 pointers?? error x-(

So just make sure you do the appropriate type-casts(like the one answered above)

Rupinderjit said:   1 decade ago
argv[i] is pointer to strings in an argument.So argv[1],argv[2] or whatever are pointer to respective strings pointed to by argv[index].

Since if we look at pointer arithmetic, then two pointer's addition is not allowable.

So there is an error.

But if we change type using typecast,and after on changing type to integer, these are then merely an constant int value.

So do the answer.

Manish.Sargaiyan said:   1 decade ago
I agreed with atoi we have to use to convert into integer.

But argv[0]=1.
argv[1]=2.
argv[2]=3.
What about argv[3] ?

Please anyone clear this doubt...!!!


Post your comments here:

Your comments will be displayed after verification.