Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > strcat , strcpy - освобождение памяти |
Автор: PRF 16.4.2009, 21:28 | ||
Здравствуйте, извините за такие вопросы, но, подскажите пожалуйста почему после применения функции strcat и strcpy к динамически выделенному массиву, delete не работает, а выдает ошибку при выполнении программы.
а вот ща несколько минут назад сделал с strcpy_s и похоже работает.. почему так? |
Автор: mrbrooks 16.4.2009, 21:36 | ||||
PRF, ошибку выдает именно при удалении или все таки при копировании ![]() так же будет все ОК?
не забывай что строка заканчивается на '\0' - а это +1 символ поэтому
и будет гуд. а вообще камрад юзай std::string |
Автор: ISergeyN 16.4.2009, 21:36 |
char* dir = new char[7]; |
Автор: PRF 16.4.2009, 21:45 |
Ага все, спасибо, ступил(( |
Автор: inside_pointer 17.4.2009, 18:17 | ||
![]() |
Автор: zim22 17.4.2009, 18:43 |
inside_pointer, C-строки должны заканчиваться 0-символом. Иначе функции для работы с ними будут работать некорректно. |
Автор: inside_pointer 18.4.2009, 03:10 |
как же тогда strncpy нуль-символ не записывает, или она не строковая ? ![]() просто, если он хочет записать в шесть байт, он может это сделать, и любой функцией, которой захочет главное-то в них, что они всегда правильно работают (предсказуемо) а для чтения тоже можно написать соответствующую обёртку или не писать а пользоваться любыми доступными средствами, переносимыми и так далее ![]() |
Автор: inside_pointer 18.4.2009, 08:39 |
zim22, я говорю, что strncpy не копирует нуль-символ, когда не доходит до него, как ты объяснишь отсутствие у строковой функции этого действия со своими тезисами ? ![]() |
Автор: zim22 18.4.2009, 08:47 | ||
Функция strncat копирует количество символов, заданное третьим параметром функции. Если вы используете функцию strncat, а не strcat - то ответственность за корректное копирование ложится на вас, а не на компилятор. здесь вы создаёте массив из шести объектов типа char. В этой строке вы копируете 6 символов в масив dir. Но проблема в том, что строка содержит не 6, а 7 символов. И 7 символ вы не копируете. В результате строка, помещённая в массив dir не будет содержать завершающий 0-символ и строка dir "продлится" до тех пор, пока не встретит 0- символ в чужой области памяти. |