Well, argv
is an array of pointer to strings. All command line arguments are passed as strings and the pointer to each of them is held by argv[n]
, where the sequence for the argument is n+1
.
For a hosted environment, quoting C11
, chapter ยง5.1.2.2.1
If the value of argc
is greater than zero, the string pointed to by argv[0]
represents the program name; argv[0][0]
shall be the null character if the
program name is not available from the host environment. If the value of argc
is
greater than one, the strings pointed to by argv[1]
through argv[argc-1]
represent the program parameters.
So, clearly, for an execution like
./123 10 10 10 //123 is the binary name
argv[0]
is not the first "command line argument passed to the program". It's argv[1]
.
*argv[1]
does not return the int
value you passed as the command-line argument.
Basically, *argv[1]
gives you the value of the first element of that string (i.e, a char
value of '1'
), most possibly in ASCII encoded value (which you platform uses), ansd according to the ascii table a '1'
has the decimal va;lue of 49
, which you see.
Solution: You need to
- Check for the number of arguments (
argc
)
- Loop over each argument string
argv[1] ~ argv[n-1]
while argc == n
- Convert each of the input string to
int
(for this case, you can make use of strtol()
)