CodeInside
@CodeInside

Как правильно распределить память?

Пишу класс "Файловый менеджер". В нём есть одно статическое поле (реализовал его через паттерн Singleton) cur_dir (current direction). То есть директория, в которой сейчас как-бы находится пользователь. Тип этого поля - указатель на символы (char*). Получается, при каждом изменении "текущей директории" нужно перераспределять динамическую память, перезаписывать адрес и т.д. Достало когда начал работать с strcpy_s и strcat_s, где нужно задавать размер буфера, а не строки (то есть strlen(cur_dir) не всегда пройдёт). Лучше будет задать константой значение максимальной длины адреса и не морочиться с динамической памятью? Если да, то какое значение лучше подобрать? (ибо думаю адреса могут быть ооочень длинными). Или может предложите другую альтернативу?

И ещё один вопрос: почему в одном проэкте, где в файлах подключаются идентичные библиотеки, в одном исходнике strcat_s(char*,const char*) нормально работает, а в другом та же ситуация, но ошибка на этапе компиляции. Скриншоты прилагаются.
f043bb74edfe44b2b423436b58316a10.pngcbe10d9c5aa34de58aba435f4af5c261.png
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
Что у нас такое cur_dir?
У функции strcat_s три параметра…
errno_t strcat_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource 
);

В C++ есть также шаблонная перегрузка с двумя параметрами.
template <size_t size>
errno_t strcat_s(
   char (&strDestination)[size],
   const char *strSource 
); // C++ only

Вывод такой. Перегрузка с двумя параметрами принимает первым параметром только массив, но не char*.

P.S. А лучше, конечно, будет использовать контейнеры наподобие std::string.
Ответ написан
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект
23 нояб. 2024, в 21:49
1000 руб./в час