Школа 21, Бассейн, день седьмой и восьмой
tl;dr day05 – 5/100, day06 – 100/100, day07 – про память, day08 – хидеры, структуры, препроцессор.
Получив результаты тестирования пятого дня я полностью убедился в том, что не понял до конца как реализованы в стандартных библиотеках `strcpy`, `strncpy`, `strlcpy` и те же с `strcat`. Так, например, `strcpy` оказывается делает `memcpy` по длине второй строки, а `strncpy` сначала проверит нужно ли вставлять нули, вставит их все так же через копирование памяти, а потом скопирует вторую строку.
В исходниках ядра Linux особенно забавно читать комментарии, где предположительно сам Линус пишет о том, что эти реализации подвержены багам. К примеру, будем мы копировать два подряд расположенных участка памяти – а с какого конца? Если с последнего символа, то во первой строке окажется конец второй; если с первого, то – начало.
С последним заданием шестого дня, вообще, случился невероятный надмозг – я выделял массив 2047 × 2047 для хранения и сортировки аргументов (так как `malloc` в той задаче не разрешен), но запутался в том, что от меня хочет Норминетта и, в итоге, убрал массив и вместо этого сортировал аргументы _побуквенно с копированием_. На аргументах одинаковой длины это работало прекрасно, а вот с аргументами разной... В общем, спросил я одного из прошаренных пиров и тот подсказал мне сортировать указатели. ¯\_(ツ)_/¯
День седьмой принес нам `malloc` (и отсутствие костылей в виде огромных буферов :Kapp:). Тут я узнал, что если попросить у него слишком много памяти (ОЧЕНЬ МНОГО), то он откажется и вернёт нуль-поинтер. Ещё и код ошибки выставит в `ENOMEM`.
Написав эти строки я подумал, что не стоит ли мне переписать задания восьмого дня и сделать там проверку на нуль-поинтер 🤔.
Восьмой же день полностью окунает нас в препроцессор. Привет, собственные хидер-файлы с хидер-гардами, `#define` и `typedef`. В целом, не очень сложный день. Разве что последние дня задания стоит сделать вместе, а потом раскопировать хидер в отдельные папки.
Настроение шестого февраля было просто полностью убитым. После обязательной педагогической встречи оно стало чуууть-чуть лучше. Под ночь меня окончательно отпустило и стало более-менее нормально, однако я понял, что заболел. Так что ночь прошла в попытках согреться, вжавшись посильнее в стул.
Спасибо за зарядные устройства для наушников и телефона и за ромашку. Они были как нельзя кстати.
Вчера в 16:21 начался марафон. Перед уходом домой спать меня переубедили, что он начнется в 18:21. Так я, проснувшись, проверив Слак, понял, что марафон – хуерафон и лег дальше спать. В конце концов, больным поспать полезно с целью выздоровления.
Сегодня – конец марафона и экзамен.
Комментарии
Отправить комментарий