SPRUIG8J January 2018 – March 2024
In C, a character string constant is used in one of the following ways:
char s[] = "abc";
When a string is used as an initializer, it is simply treated as an initialized array; each character is a separate initializer. For more information about initialization, see Section 6.7.
strcpy (s, "abc");
When a string is used in an expression, the string itself is defined in the .const:string section, along with a unique label that points to the string; the terminating 0 byte is explicitly added by the compiler.
String labels have the form $C$SLn, where $C$ is the compiler-generated symbol prefix and n is a number assigned by the compiler to make the label unique. The number begins at 0 and is increased by 1 for each string defined.
The label $C$SLn represents the address of the string constant. The compiler uses this label to reference the string expression.
Because strings are stored in the .const section (possibly in ROM) and shared, it is bad practice for a program to modify a string constant. The following code is an example of incorrect string use:
const char *a = "abc"
a[1] = 'x'; /* Incorrect! undefined behavior */