Strings must contain a null-termination character at or before the address of the last element of the array before they can be safely passed as arguments to standard string-handling functions, such as strcpy()
or strlen()
. This is because these functions, as well as other string-handling functions defined by the C standard [ISO/IEC 9899:2011], depend on the existence of a null-termination character to determine the length of a string. Similarly, strings must be null terminated before iterating on a character array where the termination condition of the loop depends on the existence of a null-termination character within the memory allocated for the string, as in the following example:
...
The standard strncpy()
function does not guarantee that the resulting string is null terminated [ISO/IEC 9899:2011]. If no null character is containded in the first n
characters of the source
array, the result could not be null terminated.
...
CERT C++ Secure Coding Standard: STR32-CPP. Null-terminate character arrays as required
ISO/IEC 9899:2011 Section 7.1.1, "Definitions of terms," Section 7.22.3.5, "The realloc
function," and Section 7.24, "String handling <string.h>
"
...
[Schwarz 2005]
[Seacord 2005a] Chapter 2, "Strings"
[Viega 2005] Section 5.2.14, "Miscalculated NULL
termination"
...