Школа 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. Так я, проснувшись, проверив Слак, понял, что марафон – хуерафон и лег дальше спать. В конце концов, больным поспать полезно с целью выздоровления.

Сегодня – конец марафона и экзамен.

Комментарии

Популярные сообщения из этого блога

Школа 21, до Бассейна, день первый

Школа 21, Бассейн закончился

Школа 21, Бассейн, день первый