Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

A string literal is a sequence of zero or more multibyte characters enclosed in double-quotes ("xyz", for example, "xyz"). A wide string literal is the same, except prefixed by the letter L , for example (L"xyz", for example).

At compile time, string literals are used to create an array of static duration and sufficient length to contain the character sequence and a null-termination character. It is unspecified wehether whether these arrays are distinct. The behavior is undefined if a program attempts to modify string literals but frequently results in an access violation, as string literals are typically stored in read-only memory.

Do not attempt to modify a string literal. Use a named array of characters to obtain a modifiable string,.

Non-Compliant Code Example

In this example, the char pointer p is initialized to the address of the static string. Attempting to modify the string literal result results in undefined behavior.

...

As an array initializer, a string literal specifies the initial values of characters in an array (as well as the size of the array). The following This code creates a copy of the string literal in the space allocated to the character array a. The string stored in a can be safely modified.

Code Block
char a[] = "string literal";
a[0] = 'S';

...

Modifying string literals and can lead to abnormal program termination and results in undefined behavior that can be used in denial-of-service attacks.

...