I am doing a ctf problem and there is a line i can't understand.
int  (*fp)(char *)=(int(*)(char *))&puts, i;
Can anyone explain me what does this mean?
fp is a pointer
(*fp)
to a function
(*fp)(
that accepts 1 argument of type char
(*fp)(char)
and returns a value of type int
int (*fp)(char)
The pointer is initialized with the address of puts after a mostly redundant conversion.
int  (*fp)(char *)=(int(*)(char *))&puts
int  (*fp)(char *)=(int(*)(char *))puts // & redundant
int  (*fp)(const char *)=puts
The object i is not initialized. It has type int
int  (*fp)(char *)=(int(*)(char *))&puts, i;
                        First there is a variable declaration:
int  (*fp)(char *)
fp is a pointer to function, which is taking a char * parameter and returning int.
Then fp is initialized to a value:
(int(*)(char *))&puts
The value is the address of the puts function, cast to the same type as fp.
And finally, there is another variable declaration:
int /* ... */, i;
                        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