![]() |
|
Модераторы: bsa |
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Функция должна перезаписать заданную подстроку на новую, вернуть исправленную строку. Мой код:
Работает крайне нестабильно. Причина проста, строка R фиксированного размера не имеет и он изначально неизвестен, приходится задавать динамически. Отсюда глюки, когда выделяем под нее память, то она затирает остальные строки в памяти и начинается ерунда полная. Первый раз функция отрабатывает корректно (у меня, по крайней мере), так как определение r расположено в начале, она расположена отсюда ниже по памяти и не затирает наших строк, но это неправильно, т.к. мы трем не свою память и фиг ее знает, чего там лежит, а плюс к тому при повторной отработке функции мы снова выделяем память для LEFT, после чего она располагается снова после R, после чего начинается ее затирка... Вот такие веселости... Как исправить эту проблему, помогите, целый день убил и не догадался. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
все просто. Используя функцию strstr находишь все вхождения заменяемой подстроки и считаешь их. Затем, с помощью malloc выделяешь память под новую строку, с учетом изменения размера (strlen(src) + (strlen(to) - strlen(what)) * n + 1, где n - количество вхождений), затем в цикле опять с помощью strstr, strcpy и strncat копируешь данные в новый массив.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |