Практика языка 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.

КОМЕНТАРІ • 42

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr 4 місяці тому +17

    Золотой человек. Разъясняет всё как песню. Прятно слушать

  • @taraslitvinenko8651
    @taraslitvinenko8651 4 місяці тому +8

    Крутой лектор, вот голова! Низкий вам поклон и творческих успехов, гору всего нужного.

  • @aleksandr2245
    @aleksandr2245 4 місяці тому +6

    сам программирую на js, но с удовольствием смотрю Ваши видео по с/c++, очень круто, спасибо)

  • @exx-ns4tt
    @exx-ns4tt 4 місяці тому +4

    Крутой лектор

  • @user-de5wm3ik2v
    @user-de5wm3ik2v 4 місяці тому +5

    Ура ура. Новая серия про С. 😊

    • @tilir
      @tilir  4 місяці тому +2

      Постараюсь выйти на ежесубботнюю выкладку.

  • @user-yg8ce1wb3n
    @user-yg8ce1wb3n 3 місяці тому +2

    Супер спасибо!!!

  • @free_yashin
    @free_yashin 4 місяці тому +1

    Универ закончил пару лет тому назад, сейчас буду доучиваться ;) Спасибо за уникальный контент

  • @DmitryKandiner
    @DmitryKandiner 26 днів тому

    26:30 Можно ещё добавить "джигитовки": while (*dst++ = *src++);

  • @DmitryKandiner
    @DmitryKandiner 26 днів тому

    1:12:10 Немного покопался и выяснил, что идеальным коэффициентом для размера буфера было бы золотое сечение (1.612...), а оптимальным в практическом плане - 1.5

  • @Stedmiel
    @Stedmiel 4 місяці тому +2

    48:28 сейчас С++ compatible можно и с designated initializer'ами. типа struct DT d1 = { .what = DT_DAY, .u = { .day = 42}};
    но .u.day нельзя, да. грустька. и порядок полей путать нельзя, насколько помню.

  • @GB_AM
    @GB_AM 4 місяці тому

    👍🏻👍🏻👍🏻

  • @andrewkot5212
    @andrewkot5212 3 місяці тому

    Спасибо за такие интересные лекции, скажите, а будет ли тема аллокаторов? Очень интересно было бы вас послушать относительно этого предмета

    • @tilir
      @tilir  3 місяці тому

      Как допсеминар если ребята захотят. Увы, именно эта группа как-то не очень хочет.

  • @user-yw2ub8mb5b
    @user-yw2ub8mb5b 4 місяці тому

    Здравствуйте, Константин. Не думали ли вы насчёт того, чтобы выкладывать лекции в виде подкастов на Яндекс музыку? Было бы очень удобно слушать вас в таком виде

    • @tilir
      @tilir  4 місяці тому +5

      Я боюсь без доски и визуальной составляющей это невозможно воспринять.

  • @pavelrid
    @pavelrid 4 місяці тому +2

    Печально, когда студенты не хотят доп. семинары у очень хорошего и знающего глубоко предмет преподавателя

    • @tilir
      @tilir  4 місяці тому +2

      Вы не представляете какая у них была сессия. Там весь ресурс мозга уходит на вышмат и общефиз.

  • @rexby
    @rexby 4 місяці тому

    Здравствуйте! А какое расписание семинаров? Когда ждать новых видео?

    • @tilir
      @tilir  4 місяці тому +1

      Семинары проходят по понедельникам, выкладывать буду стараться по субботам (нужно время на обработку и монтаж).

  • @sibedir
    @sibedir 4 місяці тому +2

    Может всё-таки завести вторую камеру, которая снимает только доску?

  • @sibedir
    @sibedir 4 місяці тому

    Константин Игоревич, а сделайте курс лекций по си от Embarcadero )))

    • @sibedir
      @sibedir 4 місяці тому

      Не, если без шуток, то я бы такой курс до дыр засмотрел. В основном прогаю на Delphi. Но год назад таки взялся за с++ (оооочень помогают Ваши лекции). Но среда разработки Delphi/Embarcadero очень нравится. Для моих маленьких задач (написание простеньких программ-помощников к основной работе) самое то.

    • @taraslitvinenko8651
      @taraslitvinenko8651 4 місяці тому

      А собственно зачем, это же IDE с фомочками. И у каждой IDE и копмиляторов в частности есть свои фишки и дополнительные языковые конструкции имеющие отношение к языку только в рамках конкретной IDE/Compiler которые уже нужно искать в других источниках. Но советую отходить от систем embarcadero, можно погрязнуть в грязном коде. Если хочется в ide, то советую изучать более мощные инструменты, которые развиваются и имеют кроссплатформенные возможности, ну например Visual Studio Community, там нет присловутых формочек и более погружается в код и понимание тех или иных механизмов работы языка и прочего.

    • @sibedir
      @sibedir 4 місяці тому

      @@taraslitvinenko8651 я давно установил и VS и QT.
      А почему Embarcadero? Собственно потому что это максимально удобный IDE с форточками.

    • @sibedir
      @sibedir 4 місяці тому

      а, кстати, чуть не забыл. Ещё Lazarus )))

    • @sibedir
      @sibedir 4 місяці тому

      Куда-то комментарий мой пропал (.
      Ютуб чудит с этими комментариями

  • @dmitry6123
    @dmitry6123 4 місяці тому +1

    24:55 скобочки не нужны, можно просто точку с запятой поставить

    • @tilir
      @tilir  4 місяці тому

      Это верно. Ещё можно несколько пробелов убрать, я там как-то широко расписался =)

    • @dmitry6123
      @dmitry6123 4 місяці тому +1

      @@tilirДа и по факту там только while (*dst++ = *src++);
      Такое сложно воспринимается новичками, но со временем уже не воспринимаешь такой код как нечто необычное.

  • @minaevmax
    @minaevmax 4 місяці тому +1

    Сложновато воспринимать информацию во время рисования из-за рассинхрона действий и звука (48:40 и далее)

    • @tilir
      @tilir  4 місяці тому +1

      Есть такое. Звук пишется в аудитории с доской а рисую (стараясь попадать в звук) я уже дома. Можно попробовать транслировать доску, в принципе там что-то видно. Но вообще она сильно бликует. Надо будет сделать эксперимент.

    • @minaevmax
      @minaevmax 4 місяці тому

      @@tilir Если не получится, то, как вариант, можно также дома рисовать, но отображать сразу всю информацию, подсвечивая конкретные блоки, о которых в данный момент идет речь.

  • @MVZ1983
    @MVZ1983 Місяць тому +1

    Поле what типа enum и union это конечно хорошо, но какой же это хак по сравнению с ООП или функциональным программированием

    • @tilir
      @tilir  Місяць тому

      Да, я и сам это обыгрываю в соответствующей (восьмой кажется) лекции бакалаврского курса C++.

  • @DronSIG
    @DronSIG 4 місяці тому

    Автор: на ассемблере никто не пишет...
    Я и OSED: Чего? Хотя да... там же опкоды, а не ассемблер.

    • @tilir
      @tilir  4 місяці тому

      Если не секрет а что вы на опкодах пишете и зачем вы это делаете?

    • @DronSIG
      @DronSIG 4 місяці тому

      @@tilir В рамках исследования уязвимостей ПО. Во-первых, реверсинг, в котором не для всех платформ существуют модули для дизассемблеров. Во-вторых, написание PoC для найденной уязвимости требует понимания, как код исполняется на CPU, а сам PoC и нагрузка состоит из последовательности байтов, которые инжектятся в область памяти, после чего происходит переход путем контроля адреса в EIP. Это прям если в кратце. А так - все гораздо запутаннее :)
      P.S. Конечно же это не нужно каждому второму разработчику. Нужно просто некоторое понимание, как устроена архитектура и API, для которых они пишут, чтобы не допускать глупых ошибок типа "Out-of-bounds Write".

    • @tilir
      @tilir  4 місяці тому

      Реверсингом я много занимался. С программированием он не связан. Всякие последовательности для уязвимостей в норме не пишутся руками а генерируются скриптами. Разработка таких скриптов это разработка ПО, но она конечно же делается на скриптовых языках. Или на том же C если надо инжектить в рантайме.

    • @DronSIG
      @DronSIG 4 місяці тому

      ​ @tilir Если реверсить какой-нибудь x86, то ок. А вот если какой-нибудь Taxas Instruments, под который нет модулей под IDA. То сначала свой дизасм сделать надо, где плотно сталкиваешься с декодом инструкций, пониманием конвейера и вот этого всего.
      Написание адекватной кастомной нагрузки ходит на грани ассемблера и опкодов. Да, писать можно хоть на питоне, используя тот же keystone. Но по факту это будет ассемблер внутри условного ks.asm(), с неотемлемым пониманием того, какие опкоды он генерирует, для избегания badchars, как минимум.
      Средняя нагрузка в таком формате, может содержать сотню-две строк asm кода и всего несколько строк питона для keystone и отладки.
      Естественно я не сравниваю это с классической разработкой ПО. Просто, справедливости ради, такое тоже существует :)
      P.S. На правах шутки зацепился за фразу и отшутился. Не ставлю перед собой цель разводить тут жаркий спор и что-то доказывать :)

  • @bw7123
    @bw7123 4 місяці тому +1

    Если arr = realloc(arr, 1000) == NULL, то можно сделать exit(1) и забыть про arr.

    • @tilir
      @tilir  4 місяці тому +13

      Нельзя если вы пишете код который могут использовать как библиотеку. Ну и в целом это дурной тон.
      Освобождайте все ресурсы, которыми владеете, мойте руки перед едой, переходите улицу на зелёный. Все эти правила можно какое то время игнорировать, но лучше не.