String в char*
- Войдите на сайт для отправки комментариев
Сб, 14/11/2015 - 19:26
Здравствуйте! Помогите с такой проблемой.
При выполнении 2-3 циклов этого кода все перестает работать.
Я считаю что используемый для преобразования буфер переполняется и его надо как-то очищать в конце каждого цикла... как это лучше всего сделать?
char * RandomTrec(int zz, int xx){ // функция генерации имени файла в заданных пределах char* result; int t100; t100=random(zz, xx+1); String xxx = ".mp3"; String Name2 = "track"; String nomber = String(t100); String trackName2 = String(Name2 + nomber + xxx ); //генерируем имя файла unsigned char* buf = new unsigned char[100]; // преобразуем стринг в чар trackName2.getBytes(buf, 100, 0); //const char*Name = trackName2.c_str(); char *Name = ( char*)buf; result=Name; return result; }
ты создаешь буфер функцией new, а удалять в конце не удаляешь (delete buf) в результате они остаются в памяти и она заканчивается.
Большое Спасибо! Скажите, а как в таком случаи очистить еще и String trackName2?
Когда очистить? Это строка создается в функции и там же уничтожается.
Но очищается она так trackName2 = ""; но это лишнее
Я наверное тупой... подскажите в каком виде и куда именно поставить delete buf... что-то не хочет работать...
Да и вообще реализация функции в корне неправильна.
Для чего столько манипуляций?
Это пререливание их пустого в порожнее... Потому что возвращается указатель на переменную которая уничтожается при выходе из фукции. Формально по указанным адресам может оставаться правильная информация и программа может работать, а может, что вероятнее! там уже будут другие данные принадлежащие другим переменным и функциям. В результате чего программа также может виснуть.
Правильно делать, передать функции указатель на буфер (строку) в которую она и поместит результат своей работы. Либо создать буфер new в функции и вернуть указатель на него, а удалить его (delete) где-то снаружи, когда он станет не нужен.
Все заработало. Сейчас объясню в чем дело: у меня в проекте есть mp3-шилд, котороый должен вопсроизводить звуковый файлы при определенных условиях. Библиотека данного шилда, при обращении к нему с просьбой проиграть конкретный файл, требует тип char*. Я долго мучался с этим, ведь если запихать имена всех файлов в один массив и затем по одному их вытаскивать, то нехватит памяти. Поэтому я решил что проще генерировать название файла из составляющих. Как это сделать для char* я не нашел, поэтому прибег к такой конструкции (гернерация в String, затем String в Char*).
String.c_char() это и есть указатель char* на строку
т.е.
Ну, теперь буду знать!) Большое Спасибо!)