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.

Aadesh said:   7 years ago
@Abhishek.

You can use it if you want to pass a single argument in command line arguments. But generally we pass more than 1 so we need to take array of pointer to char.

Yogesh said:   8 years ago
But for me it prints the output as 1 use online C compiler from here.

Abhishek sakariya said:   8 years ago
I am focusing on Linux environment. Is it possible to write.

Char*argv instead of char**argv?

Siri said:   8 years ago
Cmd line arguments passed is sample 1 2 3 (which is your filename followed by args).
==============================================.

argv[0]=> Contains your executable file name/ program name (in this case sample is the program name).

argv[1]=> Will have 1.

argv[2]=> Will have 2.

argv[3]=> Will have 3.

And all these will be stored in the form of strings. So to add convert the args to integer using atoi function and then add.

Manish.Sargaiyan said:   9 years 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...!!!

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.

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)

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

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!

Sweety said:   1 decade ago
@Brindha : perfect


Post your comments here:

Your comments will be displayed after verification.