Does C 11 Allow for Non-Null-Terminated Strings in c_str() Method?
In C 11, the definition of c_str() for the basic_string class has changed. It is now defined to be equivalent to data(), which in turn is defined to return a pointer to the nth element of the string, where n is between 0 and the size of the string minus 1.
However, the updated definition of the operator[] method, which underlies both c_str() and data(), makes it clear that strings must now use null-terminated buffers internally.
Specifically, the operator[] method requires that the returned value be a reference to an object of type T with a value of charT(), where T is the type of the string's elements and charT() is the type of the null character. Additionally, this referenced value cannot be modified.
Since c_str() and data() are both required to be O(1) operations, the implementation is essentially forced to use null-terminated buffers. Furthermore, the return value requirement of the operator[] method also means that the terminating null character must be in the same buffer as the string's elements.
The above is the detailed content of Does C 11 Require Null-Terminated Strings for c_str() and data()?. For more information, please follow other related articles on the PHP Chinese website!