Home > Article > Backend Development > Is C 11\'s `string::c_str()` Still Null-Terminated?
Does C 11's string::c_str() Eliminate Null Termination?
In C 11, string::c_str is no longer guaranteed to produce a null-terminated string.
Reason:
In C 11, string::c_str is defined as identical to string::data, which in turn is defined as equivalent to *(begin() n) for 0 <= n < size(). The standard does not explicitly require the string to have a null character at its end.
Consequences:
This implies that string::c_str() may no longer return a null-terminated string, leading to potential errors in scenarios that assume such termination.
Solution:
The solution is to use string::c_str() only for compatibility with legacy code. For new code, use string::data() instead. While string::data() does not return a null-terminated string, it returns a pointer to the underlying buffer, which is guaranteed to be null-terminated internally.
Implementation Details:
Internally, strings are now required to use null-terminated buffers. The operator[] definition in section 21.4.5 requires that for size() <= pos, the operator returns a reference to a charT() with the value '
The above is the detailed content of Is C 11\'s `string::c_str()` Still Null-Terminated?. For more information, please follow other related articles on the PHP Chinese website!