Я пишу свой класс строк и возникла проблема: char* который мне выдает вектор(vector<char>) через метод data() имеет в конце странные символы которых по сути нету. (Я знаю что это из-за нуль терминатора) Но я не могу просто добавить нуль терминатор в вектор, тк я буду хранить в этом классе и бинарные данные. Получается, что в любом случае бинарные данные будут иными, что может очень плохо сказаться на моих проектах, но ведь в классе string если вернуть этот указатель то будет всё хорошо. Данные не будут изменены.
Как мне повторить тот же результат как и в string??
C/C++
С++, как оставить без изменений данные в char* который указывает на внутренний буфер вектора?
Вам на stackoverflow. Тут помощи не дождаться.
>char* который мне выдает вектор (vector) через метод data() имеет в конце странные символы которых по сути нету.
А что вы хотите сделать через эту самую data()? Пытаться лезть и что-то делать во внутреннем буфере вектора, не учитывая ни size(), ни capacity() уже само по себе грубейшая ошибка.
>Но я не могу просто добавить нуль терминатор в вектор, тк я буду хранить в этом классе и бинарные данные.
Вы класс для строк делаете или что-то непонятное?
> Как мне повторить тот же результат как и в string??
Вам нужно чётко для себя сформулировать задачу, которую вы хотите решить и зачем вы лезете в data(). Метод data() даже у std::string НЕ (!) даёт гарантии, что там будет нулевой символ в конце.
А что вы хотите сделать через эту самую data()? Пытаться лезть и что-то делать во внутреннем буфере вектора, не учитывая ни size(), ни capacity() уже само по себе грубейшая ошибка.
>Но я не могу просто добавить нуль терминатор в вектор, тк я буду хранить в этом классе и бинарные данные.
Вы класс для строк делаете или что-то непонятное?
> Как мне повторить тот же результат как и в string??
Вам нужно чётко для себя сформулировать задачу, которую вы хотите решить и зачем вы лезете в data(). Метод data() даже у std::string НЕ (!) даёт гарантии, что там будет нулевой символ в конце.
Чтобы 100% контролировать свой буфер, нужно его создавать, заносить туда значения своими ручонками. Для этого есть в C функция malloc().
Сколько надо памяти, динамически выделил. Предварительно обнулил все ячейки. И работаешь дальше.
А вся эта ботва в C++ с vector и другой чепушнёй - так не серьезно.
Поэтому до сих пор ОС пишут на C, а не на C++. Потому что доверия к этому пацанячему языку как не было, так и не будет. На нем только игры рисовать и офисные программы. Более серьезного на нём не пишут.
Сколько надо памяти, динамически выделил. Предварительно обнулил все ячейки. И работаешь дальше.
А вся эта ботва в C++ с vector и другой чепушнёй - так не серьезно.
Поэтому до сих пор ОС пишут на C, а не на C++. Потому что доверия к этому пацанячему языку как не было, так и не будет. На нем только игры рисовать и офисные программы. Более серьезного на нём не пишут.
Похожие вопросы
- Имя массива после инициализации принимает адрес в стеке, который указывает на адрес в куче? (Си)
- Буфер в безопасных версиях команд. strcpy_s, sprintf_s (Си)
- Различие указателей int *; и char *;
- Значение типа const char* нельзя присвоить сущности типа char*
- Не могу разобраться. Функция удаления отрицательных элементов вектора
- Программа на C++ с переводом Char в Int и наоборот при переводе возвращает НИЧЕГО
- Сравнение элементов массива типа char с символом типа char
- Как конвертировать Char или Tchar или wchar_t в LPWSTR?
- Задание на С++ Тема: Вектор
- Что означает char* str и какие у нее особенности?