Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Гарантируется ли стандартом размещение элементов строки в непрерывном блоке памяти, как это сделано для вектора? И имеет ли строка нуль терминатор равный *(string.end()). Спасибо А>Гарантируется если вызовешь c_str(), а в целом в большинстве реализаций STL не прерывный блок.
Неверно. c_str() возвращает строку вида const char* заканчивающуюся 0, но никто не гарантирует, что эта строка будет ссылаться на корректное внутреннее представление. Иными словами c_str() может вернуть указатель на временный кеш, в котором будет собираться строка, а внутри она может храниться как угодно и если вы преобразуете значение, возвращаемое c_str() в char* и попытаетесь его изменить — это ни к чему не приведёт в лучшем случае, в худшем всё может упасть...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.