C/C++

С++, как оставить без изменений данные в char* который указывает на внутренний буфер вектора?

Я пишу свой класс строк и возникла проблема: char* который мне выдает вектор(vector<char>) через метод data() имеет в конце странные символы которых по сути нету. (Я знаю что это из-за нуль терминатора) Но я не могу просто добавить нуль терминатор в вектор, тк я буду хранить в этом классе и бинарные данные. Получается, что в любом случае бинарные данные будут иными, что может очень плохо сказаться на моих проектах, но ведь в классе string если вернуть этот указатель то будет всё хорошо. Данные не будут изменены.

Как мне повторить тот же результат как и в string??
Вам на stackoverflow. Тут помощи не дождаться.
ПК
Павел Карпунин
72 487
Лучший ответ
>char* который мне выдает вектор (vector) через метод data() имеет в конце странные символы которых по сути нету.
А что вы хотите сделать через эту самую data()? Пытаться лезть и что-то делать во внутреннем буфере вектора, не учитывая ни size(), ни capacity() уже само по себе грубейшая ошибка.

>Но я не могу просто добавить нуль терминатор в вектор, тк я буду хранить в этом классе и бинарные данные.
Вы класс для строк делаете или что-то непонятное?

> Как мне повторить тот же результат как и в string??
Вам нужно чётко для себя сформулировать задачу, которую вы хотите решить и зачем вы лезете в data(). Метод data() даже у std::string НЕ (!) даёт гарантии, что там будет нулевой символ в конце.
Чтобы 100% контролировать свой буфер, нужно его создавать, заносить туда значения своими ручонками. Для этого есть в C функция malloc().
Сколько надо памяти, динамически выделил. Предварительно обнулил все ячейки. И работаешь дальше.
А вся эта ботва в C++ с vector и другой чепушнёй - так не серьезно.
Поэтому до сих пор ОС пишут на C, а не на C++. Потому что доверия к этому пацанячему языку как не было, так и не будет. На нем только игры рисовать и офисные программы. Более серьезного на нём не пишут.