It might have helped if you quoted those sections. "Hello world" is a
literal. It is immutable. You cannot change this what-so-ever, unless
Specifically, a string literal.
It may or may not be immutable. It has the type "array of char" in C,
and specifically does not have the type "array of const char".
Attempting to modify a string literal produces undefined behavior not
because it has the type "array of const char", but merely because the
C standard specifically states that it does.
it is given as via a copy function:
I have no idea what the above phrase means. There is no function
involved in your code snippet below.
char s[20] = "Hello world";
This is a declaration of an object with initialization, there is no
function involved here.
This allocated memory for s, straight after the characters are copied
in.
This causes the array 's' to be initialized at its creation with the
11 characters inside the quoted string literal followed by 9 '\0'
characters. How this initialization is performed is up to the
implementation. There need not be a "copy function" involved.