 
                            ...
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 non-compliant code example, the char pointer p is initialized to the address of a string literal. Attempting to modify the string literal results in undefined behavior.
| Code Block | ||
|---|---|---|
| 
 | ||
| 
char *p  = "string literal";
p[0] = 'S';
 | 
Compliant Solution
As an array initializer, a string literal specifies the initial values of characters in an array (as well as the size of the array). 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';
 | 
Non-Compliant Code Example
In this non-compliant example, the mktemp() function modifies its string argument.
| Code Block | ||
|---|---|---|
| 
 | ||
| 
mktemp("/tmp/edXXXXXX");
 | 
Compliant Solution
Instead of passing a string literal, use a named array:
| Code Block | ||
|---|---|---|
| 
 | ||
| 
static char fname[] = "/tmp/edXXXXXX";
mktemp(fname);
 | 
...
Risk Assessment
Modifying string literals can lead to abnormal program termination and possibly denial-of-service attacks.
...