I tested this on the server (I AM NOT ABLE TO RUN THIS CODE ON MY MACHINE). And apparently, the parameter a is stored in stack like char.
If I am calling my program like this
./a 12345678
and print out *a[1] as long in hex format, I got the value 0x3837363534333231
I will say that the program did not consider my input as long even the argument type is long.
The usual way to do this is set argv as char** type and cast it back to long using pointer.
I hope this can help someone who face the same problem and please let me know if you have ideas why this code can be compiled.
According to all the answers/comments/c spec provided, it seems like it is impossible to do that.
solved Use long** instead of char** in C main argument