Casting initializers down to a pointer
c, casting, initialization
Solution
You can do:
const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };
which is valid and will achieve what you want. Note that it is not equivalent to:
const char* yo2 = "abc":
In the former case, when `yo2` is declared at file-scope: the compound literal array has static storage duration but when `yo2` is declared at block-scope the compound literal has automatic storage duration.
In the latter case, `"abc"` is a string literal and has static storage duration (file scope or block scope).
You can also use an array instead of a pointer:
const char yo2[] = { 'a', 'b', 'c', '\0' };
Regarding your example. In C:
const char* yo2 = { 'a', 'b', 'c', '\0' };
is not valid and your compiler interprets it as:
const char* yo2 = (char *) 'a';
The value of `'a'` is not a pointer value (an address) so dereferencing `yo2` invokes undefined behavior.
Problem
Why doesn't this work? Is it possible to do some creative casting to get this to work? ``` 1: const char* yo1 = "abc"; 2: const char* yo2 = { 'a', 'b', 'c', '\0' }; // <-- why can't i do this? 3: printf("%s %s\n", yo1, yo2); ``` Result: Segmentation Fault Line 2 isn't doing what I expect it to do.