char string[] = "some text";
100% equivalent
char string[] = {'s', 'o', 'm', 'e', ' ', 't', 'e', 'x', 't', '\0'};
Your friend is confused: if string- a local variable, then in both cases you create two lines. Your variable string, which is on the stack, and the read-only string literal, which is in read-only memory ( .rodata).
There is no way to avoid read-only storage, as all data must be placed somewhere. You cannot select string literals in the air. All you can do is move it from one read-only memory segment to another, which will ultimately give you the same program size.
The first style is preferable because it is more readable. It is truly a form of syntactic sugar.
, , " ", "some text" . -, , .