int main(int argc, char **argv){
printf("argv: %s\n",argv); // does not work and prints random stuff
printf("*argv: %s\n",*argv); // works and prints ".a.out"
}
I test with:
./a.out nop
My confusion is this:
"argv" variable in the second line has the address of the first char of "./a.out".
"*argv" variable in third line is the first char of "./a.out".
So why printf("argv: %s\n",argv);
to only print "./a.out" does not work?
I know that it's wrong, but I don't know why.
argv
is a pointer to a pointer. It means it "points" to addresses, not directly to characters.
So at address argv
, other addresses are stored, not strings.
If you want to access the first string, you have to use the address of it, which is either *argv
or argv[0]
.
I don't know if it's clear enough, don't hesitate to ask for more clarifications.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With