|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.10.2018, 13:55 | #21 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
В общем случае - да. А так зависит от контракта функции. Возможно, ваша функция всегда будет вызываться для валидного указателя, тогда имеет смысл оставить проверку в ассерте для дебага.
|
11.10.2018, 14:46 | #22 |
Пользователь
Регистрация: 10.09.2018
Сообщений: 43
|
Большое спасибо.
|
11.10.2018, 15:20 | #23 |
Пользователь
Регистрация: 10.09.2018
Сообщений: 43
|
Извините, можете еще с одним кодом помочь. Я думал, что понимание проблем в предыдущем коде мне помогут исправить этот, но оказалось, это не так.
В упражнении сказано, написать функцию, которая заменяет содержимое указанной строки этой же строкой, но в обратном порядке. Функцию, то я написал, но почему-то она при работе с другими функциями выдает разные результаты. Код:
Скриншот 2018-10-11 14_57_24.png Но, например, если я использую вместо s_gets() стандартную библиотечную функцию fgets(), то вывод такой: Скриншот 2018-10-11 15_00_13.png Почему при использовании этих почти одинаковых функций, получаются такие разные результаты? При использовании fgets() строка идет в обратном порядке, но выдает ошибку сегментации. Опытным путем я выяснил, что эта ошибка выпадает, когда символов больше шести. Еще больше вводит меня в растерянность, когда я вместо того, чтобы получать строку из ввода, я ее просто объявил: char string[81] = "kamboocha". и мне выдало: Скриншот 2018-10-11 15_06_45.png P.S. s_gets я не сам смастерил, она взята из книги. по идее должна работать правильно. |
11.10.2018, 15:32 | #24 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Код:
Код:
Код:
|
11.10.2018, 16:09 | #25 |
Пользователь
Регистрация: 10.09.2018
Сообщений: 43
|
Т.е. все проблемы были из-за того, что я не выделил память для массива обратной строки?
Код:
Вложение 94429 Потому что strlen() считает количество символов в строке без нулевого символа, а элементы массива начинаются считаться с нуля, если я начну заносить символы в массив rev начиная с st[n], то rev[0] получит '\0' и строка при выводе закончится на этом нулевом символе. Вывод будет таким: Вложение 94430 Уверен, хотя несколько менее уверен после вашего вопроса. По-моему, после выделения памяти под массив программа заработала как следует. |
11.10.2018, 16:15 | #26 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Везет, но так делать не надо. Не стоит возвращать указатель на локальные переменные.
Тьфу. У меня просто в голове был стандартный алгоритм разворота через обмен соответствующих элементов. Там только до половины. ) |
11.10.2018, 16:28 | #27 |
Пользователь
Регистрация: 10.09.2018
Сообщений: 43
|
Т.е. мне лучше объявить массив в main() и передать в reverse_order() не один, а два массива?
Код:
|
11.10.2018, 16:31 | #28 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
|
11.10.2018, 17:12 | #29 |
Пользователь
Регистрация: 10.09.2018
Сообщений: 43
|
Скриншот 2018-10-11 16_53_29.png
не, я, конечно, могу сделать так: Код:
|
11.10.2018, 17:33 | #30 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Не так. Вот у вас есть строка 1 2 3 4 5 6 и вам надо ее развернуть. Что делать? Взять и поменять местами 1 с 6, ...
Цитата:
Можно. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите разобраться с указателями. | Sinli | Общие вопросы C/C++ | 2 | 04.10.2018 22:47 |
Помогите пожалуйста разобраться с указателями? | седьмой | Общие вопросы C/C++ | 20 | 18.04.2017 07:26 |
помогите разобраться с указателями С++ | sasha_14-88 | Общие вопросы C/C++ | 1 | 07.12.2014 10:39 |
Помогите разобраться с указателями | igole | Общие вопросы C/C++ | 1 | 28.04.2013 16:47 |
Товарищи, помогите разобраться с указателями | scibern | Общие вопросы C/C++ | 7 | 11.01.2009 12:28 |