![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,035
|
![]()
да, но если в коде нету UB ))
например, в посте №7 есть минимум одно UB |
![]() |
![]() |
![]() |
#12 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,630
|
![]() |
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,702
|
![]()
Кто такое UB? "Ужасная бомбёжка" ? "Угарный бред" ? "Unsigned binary"
![]() |
![]() |
![]() |
![]() |
#14 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,035
|
![]()
всё это подходит
undefined behavior - неопределённое поведение. Программа с UB - обычно неработоспособна сразу, но иногда (если сильно не повезло) это не сразу бывает заметно |
![]() |
![]() |
![]() |
#15 | |
Форумчанин
Регистрация: 13.03.2023
Сообщений: 113
|
![]()
Раз уж речь о чистом C, выдержка из стандарта ISO/IEC 9899:2018 (E):
Цитата:
На собеседованиях от джуниора и выше обязательный вопрос, по вполне понятным причинам. Для стажеров незнание допускается, менторы по ходу научат. |
|
![]() |
![]() |
![]() |
#16 | |
Пользователь
Регистрация: 06.01.2021
Сообщений: 52
|
![]() Цитата:
Это приводило к тому, что вызывая программу несколько раз в секунду (напр., $ ./psw gen 10 -l -L -d -s), это приводило к одному и тому же результату. А так больше рандомности. Код:
Последний раз редактировалось iXNomad; 04.08.2023 в 11:23. |
|
![]() |
![]() |
![]() |
#17 | |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,035
|
![]() Цитата:
UB тут: ведь, я правильно понимаю, что reversed - это некий массив (точнее, указатель на первый элемент массива), а length - это длина массива в элементах? В этом случае тут - выход за край массива |
|
![]() |
![]() |
![]() |
#18 | |
Пользователь
Регистрация: 06.01.2021
Сообщений: 52
|
![]()
iXNomad,
Цитата:
Система же не может в 100% случаев гарантировать, что будет одинаковый адрес стека именно для этой программы при каждом запуске. Мало ли что на компе происходит. Компилятор gcc. 2. Это вроде была длина строки как strlen. Без учёта '\0'. Сама сигнатура функции уже была написана в условии задачи. Последний раз редактировалось iXNomad; 04.08.2023 в 14:38. |
|
![]() |
![]() |
![]() |
#19 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,035
|
![]()
в данном посте я даже поиском ни разу не увидел вызов strlen
Обычно передают указатель на начало массива и количество элементов в массиве. Это ожидание пользователя функции по умолчанию. Если это не так, то в комментарии нужно обязательно указывать костыли (а ещё лучше - избавляться от них) ![]() |
![]() |
![]() |
![]() |
#20 | |
Пользователь
Регистрация: 06.01.2021
Сообщений: 52
|
![]() Цитата:
Было две задачи, я их немного спутал, потому что они обе были сложные, и в обеих у меня была идея с двумя указателями - то есть они работают в паре, в общем случае один указатель стоит в начале слова, пока второй бежит до первого пробела. Фишка в том, что если много пробелов, то они все сохраняются на своих местах, т.к. после того, как нужные действия со словом выполнены, указатель продолжает бежать до первого непробельного символа, и тот, который фиксировал начало предыдущего слова, двигается к тому, который бежит по словам, и начинает указывать на начало уже следующего слова. В одной нужно было инвертировать все слова, но порядок оставить таким же, а в другой - инвертировать сам порядок слов, при этом слова в прямом порядке. Я скинул решение второй. "This is a sentence 3 spaces" -> "spaces 3 sentence a is This" В самой этой задаче было условие - она принимает указатель на строку, длину строки (в значащих символах, без \0, то есть как strlen) и указатель на ещё одну пока пустую строку reversed, в которую я должен записать перевёрнутый порядок слов. Я выкрутился так - сначала просто инвертирую строку, а потом пробегаюсь, определяю границы слов по пробелам и инвертирую каждое слово обратно. Получается, что сами слова написаны правильно, но в обратном порядке. Вообще написана сигнатура довольно странно, для меня это выглядит так, будто бы Первая же задача была немного другой - там нужно было просто инвертировать каждое слово, при этом порядок слов оставить таким же. "This is a sentence 3 spaces" -> "sihT si a ecnetnes 3 secaps" Код:
Последний раз редактировалось iXNomad; 04.08.2023 в 15:13. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
МГУ или куда идти дальше...(после колледжа) | Алексей_2012 | Свободное общение | 9 | 20.01.2014 16:12 |
куда идти дальше после базового курса ? | Gradus | Свободное общение | 4 | 28.01.2012 10:41 |
Какую купить версию книги Стивена Прата. Запутался. | spamer | Свободное общение | 0 | 26.01.2010 03:01 |
Почему после выполнения do-while, вложенного в if, инструкции дальше не выполняются? | Chewing_dog | Помощь студентам | 3 | 09.06.2009 06:44 |
После ошибки продолжить работу дальше | Shouldercannon | Общие вопросы Delphi | 2 | 21.04.2009 11:23 |