Устраняет ли строка::c_str() в C 11 нулевое завершение?
В C 11 строка::c_str больше не гарантируется создать строку с нулевым завершением.
Причина:
В C 11 строка::c_str определяется как идентичная строке::data, которая, в свою очередь, определяется как эквивалент *(begin() n) для 0
Решение:
Решение состоит в том, чтобы использовать string::c_str() только для совместимость с устаревшим кодом. Для нового кода вместо этого используйте string::data(). Хотя string::data() не возвращает строку с нулевым завершением, она возвращает указатель на базовый буфер, который гарантированно будет иметь нулевой конец внутри.
Детали реализации:
Внутренне, строки теперь должны использовать буферы с нулевым завершением. Определение оператора[] в разделе 21.4.5 требует, чтобы для size()
Дополнительные примечания:
&operator[](0) можно использовать как синоним для c_str().Завершающий нулевой символ должен находиться в тот же буфер, что и строковые данные, так как *(p size()) должно быть равно charT(). Таким образом, даже если нулевой символ инициализируется лениво, невозможно наблюдать буфер в промежуточном состоянии.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3