Практика языка C (МФТИ, 2023-2024). Семинар 5.1. Строки и символы.
Вставка
- Опубліковано 13 чер 2024
- Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы начнём второй семестр знакомства с основами языка C и разберём работу с индивидуальными символами и со строками. Кроме того мы возобновим знакомство с объединениями и перечисляемыми типами.
Семинарист: Константин Владимиров.
Дата: 5 февраля 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.
Предыдущий семинар: • Практика языка C (МФТИ...
Следующий семинар: • Практика языка C (МФТИ...
Слайды к занятиям: cs.mipt.ru/wp/?page_id=7775
Примеры кода: github.com/tilir/c-graduate
Задачник: olymp1.vdi.mipt.ru/
Timeline
00:00 Символы
12:15 Строки в языке C
23:15 Копирование строк и прочие функции над ними
33:35 Реаллокации
37:00 Время решать задачи
39:25 Задача лексического анализа
44:15 Объединения и перечисления
01:01:20 Ревью кода и завершение
Errata:
* 27:58 strcmp возвращает не 0, 1 или -1, а 0, нечто, большее 0, или нечто, меньшее 0.
Золотой человек. Разъясняет всё как песню. Прятно слушать
Крутой лектор, вот голова! Низкий вам поклон и творческих успехов, гору всего нужного.
сам программирую на js, но с удовольствием смотрю Ваши видео по с/c++, очень круто, спасибо)
Крутой лектор
Ура ура. Новая серия про С. 😊
Постараюсь выйти на ежесубботнюю выкладку.
Супер спасибо!!!
Универ закончил пару лет тому назад, сейчас буду доучиваться ;) Спасибо за уникальный контент
26:30 Можно ещё добавить "джигитовки": while (*dst++ = *src++);
1:12:10 Немного покопался и выяснил, что идеальным коэффициентом для размера буфера было бы золотое сечение (1.612...), а оптимальным в практическом плане - 1.5
48:28 сейчас С++ compatible можно и с designated initializer'ами. типа struct DT d1 = { .what = DT_DAY, .u = { .day = 42}};
но .u.day нельзя, да. грустька. и порядок полей путать нельзя, насколько помню.
👍🏻👍🏻👍🏻
Спасибо за такие интересные лекции, скажите, а будет ли тема аллокаторов? Очень интересно было бы вас послушать относительно этого предмета
Как допсеминар если ребята захотят. Увы, именно эта группа как-то не очень хочет.
Здравствуйте, Константин. Не думали ли вы насчёт того, чтобы выкладывать лекции в виде подкастов на Яндекс музыку? Было бы очень удобно слушать вас в таком виде
Я боюсь без доски и визуальной составляющей это невозможно воспринять.
Печально, когда студенты не хотят доп. семинары у очень хорошего и знающего глубоко предмет преподавателя
Вы не представляете какая у них была сессия. Там весь ресурс мозга уходит на вышмат и общефиз.
Здравствуйте! А какое расписание семинаров? Когда ждать новых видео?
Семинары проходят по понедельникам, выкладывать буду стараться по субботам (нужно время на обработку и монтаж).
Может всё-таки завести вторую камеру, которая снимает только доску?
Константин Игоревич, а сделайте курс лекций по си от Embarcadero )))
Не, если без шуток, то я бы такой курс до дыр засмотрел. В основном прогаю на Delphi. Но год назад таки взялся за с++ (оооочень помогают Ваши лекции). Но среда разработки Delphi/Embarcadero очень нравится. Для моих маленьких задач (написание простеньких программ-помощников к основной работе) самое то.
А собственно зачем, это же IDE с фомочками. И у каждой IDE и копмиляторов в частности есть свои фишки и дополнительные языковые конструкции имеющие отношение к языку только в рамках конкретной IDE/Compiler которые уже нужно искать в других источниках. Но советую отходить от систем embarcadero, можно погрязнуть в грязном коде. Если хочется в ide, то советую изучать более мощные инструменты, которые развиваются и имеют кроссплатформенные возможности, ну например Visual Studio Community, там нет присловутых формочек и более погружается в код и понимание тех или иных механизмов работы языка и прочего.
@@taraslitvinenko8651 я давно установил и VS и QT.
А почему Embarcadero? Собственно потому что это максимально удобный IDE с форточками.
а, кстати, чуть не забыл. Ещё Lazarus )))
Куда-то комментарий мой пропал (.
Ютуб чудит с этими комментариями
24:55 скобочки не нужны, можно просто точку с запятой поставить
Это верно. Ещё можно несколько пробелов убрать, я там как-то широко расписался =)
@@tilirДа и по факту там только while (*dst++ = *src++);
Такое сложно воспринимается новичками, но со временем уже не воспринимаешь такой код как нечто необычное.
Сложновато воспринимать информацию во время рисования из-за рассинхрона действий и звука (48:40 и далее)
Есть такое. Звук пишется в аудитории с доской а рисую (стараясь попадать в звук) я уже дома. Можно попробовать транслировать доску, в принципе там что-то видно. Но вообще она сильно бликует. Надо будет сделать эксперимент.
@@tilir Если не получится, то, как вариант, можно также дома рисовать, но отображать сразу всю информацию, подсвечивая конкретные блоки, о которых в данный момент идет речь.
Поле what типа enum и union это конечно хорошо, но какой же это хак по сравнению с ООП или функциональным программированием
Да, я и сам это обыгрываю в соответствующей (восьмой кажется) лекции бакалаврского курса C++.
Автор: на ассемблере никто не пишет...
Я и OSED: Чего? Хотя да... там же опкоды, а не ассемблер.
Если не секрет а что вы на опкодах пишете и зачем вы это делаете?
@@tilir В рамках исследования уязвимостей ПО. Во-первых, реверсинг, в котором не для всех платформ существуют модули для дизассемблеров. Во-вторых, написание PoC для найденной уязвимости требует понимания, как код исполняется на CPU, а сам PoC и нагрузка состоит из последовательности байтов, которые инжектятся в область памяти, после чего происходит переход путем контроля адреса в EIP. Это прям если в кратце. А так - все гораздо запутаннее :)
P.S. Конечно же это не нужно каждому второму разработчику. Нужно просто некоторое понимание, как устроена архитектура и API, для которых они пишут, чтобы не допускать глупых ошибок типа "Out-of-bounds Write".
Реверсингом я много занимался. С программированием он не связан. Всякие последовательности для уязвимостей в норме не пишутся руками а генерируются скриптами. Разработка таких скриптов это разработка ПО, но она конечно же делается на скриптовых языках. Или на том же C если надо инжектить в рантайме.
@tilir Если реверсить какой-нибудь x86, то ок. А вот если какой-нибудь Taxas Instruments, под который нет модулей под IDA. То сначала свой дизасм сделать надо, где плотно сталкиваешься с декодом инструкций, пониманием конвейера и вот этого всего.
Написание адекватной кастомной нагрузки ходит на грани ассемблера и опкодов. Да, писать можно хоть на питоне, используя тот же keystone. Но по факту это будет ассемблер внутри условного ks.asm(), с неотемлемым пониманием того, какие опкоды он генерирует, для избегания badchars, как минимум.
Средняя нагрузка в таком формате, может содержать сотню-две строк asm кода и всего несколько строк питона для keystone и отладки.
Естественно я не сравниваю это с классической разработкой ПО. Просто, справедливости ради, такое тоже существует :)
P.S. На правах шутки зацепился за фразу и отшутился. Не ставлю перед собой цель разводить тут жаркий спор и что-то доказывать :)
Если arr = realloc(arr, 1000) == NULL, то можно сделать exit(1) и забыть про arr.
Нельзя если вы пишете код который могут использовать как библиотеку. Ну и в целом это дурной тон.
Освобождайте все ресурсы, которыми владеете, мойте руки перед едой, переходите улицу на зелёный. Все эти правила можно какое то время игнорировать, но лучше не.