Строки в с++. Нуль терминатор. Что такое строка в с++. char c++ массив. С++ Для начинающих. Урок #60

Поділитися
Вставка
  • Опубліковано 22 лис 2024

КОМЕНТАРІ • 163

  • @aodsupport777
    @aodsupport777 6 років тому +679

    Ирония: Автор допустил нас к "hello world"у только на 60ю лекцию. :D

    • @Alex-hs8xj
      @Alex-hs8xj 5 років тому +62

      после того как к прошлому уроку я писал функцию вставляющую в массив значение введенное с консоли по индексу в любое место массива, этот урок прям легко пошел почему-то)))

    • @TheWladberlin
      @TheWladberlin 5 років тому +19

      Не расслабляйся, я заглядывал вперед,... там охренеть! ))

    • @Рыззе
      @Рыззе 3 роки тому +1

      @@Alex-hs8xj та же фигня, на удивление функции эти я сочинил довольно быстро.

  • @rettjaconomaili8201
    @rettjaconomaili8201 7 років тому +96

    Дякую, це найкращий курс з С++ на youtube!!!

  • @mykhailomorhal2181
    @mykhailomorhal2181 7 років тому +171

    Дякую.Ви дуже добре пояснюєте.Хороші уроки)

  • @ОльгаЕгорцева-й2н
    @ОльгаЕгорцева-й2н 7 років тому +56

    Спасибо большое за уроки! Все объясняется очень доступно даже для самого начинающего. Из всего многообразия информации - у Вас получается доносить её максимально последовательно и полно.

    • @ОльгаЕгорцева-й2н
      @ОльгаЕгорцева-й2н 7 років тому +2

      Не могли бы Вы сделать уроки по структурам и по файлам, а так же по работе с ними?

  • @chiliton9302
    @chiliton9302 4 роки тому +31

    Сергей, у Вас самые качественные ролики по программированию, спасибо большое, если бы не Вы, то я, скорее всего просто забросил программирование из-за многих недопониманий)

  • @Rosko6nii90
    @Rosko6nii90 5 років тому +31

    Просмотрел 18 минут на одном дыхании, автор ты победил!

  • @ДмитрийТалько-и5д
    @ДмитрийТалько-и5д 4 роки тому +21

    Для тех кто обучается используя Dev-C++: что бы вызвать функцию strlen() нужно подключить заголовочный файл строчкой #include в самом начале программы.

  • @rostyslavklyba1746
    @rostyslavklyba1746 6 років тому +8

    Хорошие уроки, как раз то что нужно начинающему программисту. Если бы еще по каждому уроку были домашние задания с ответами (не видео, а текст): посмотрел урок, сделал домашку по уроку на закрепление материала.... А так долго приходится искать примеры программ на закрепление пройденного материала. БОЛЬШОЕ СПАСИБО ЗА ВАШИ ВИДЕО УРОКИ!!!!

  • @archiechellaut9483
    @archiechellaut9483 3 роки тому +3

    Большое спасибо вам за урок и прекрасное пояснение, Сергей!

  • @ИоаннДейкун
    @ИоаннДейкун Рік тому +8

    привет из 2023! Спасибо большое за уроки!

  • @ag7720
    @ag7720 Рік тому

    Сергей, спасибо большое за работу! Береги себя!

    • @Empty_line
      @Empty_line Рік тому

      Умаляю вас можете помочь мне? у меня один вопрос!

  • @ПоліщукІванАндрійович

    Сергей, искренне благодарен Вам за ваше старание

  • @ivanliaz
    @ivanliaz 9 місяців тому +6

    Предыдущий урок я буду носить с собой на флешке :D

  • @C2H5OHH
    @C2H5OHH 3 роки тому +2

    Мой лайк 5000-й! Спасибо за урок!

  • @sankarshanarama6753
    @sankarshanarama6753 2 роки тому

    Сергей, спасибо огромное!

  • @ИванАлександрович-л7о

    Рисуешь как Бог!)

  • @sleepyNovember_project
    @sleepyNovember_project 10 місяців тому +2

    У std::string так же можно обращаться к элементам строки
    string word = "Hello";
    cout

    • @ikakSlohno
      @ikakSlohno 8 місяців тому

      Потому что std::string это обертка под char[] и из-за этого он работает так же как массив

    • @ikakSlohno
      @ikakSlohno 8 місяців тому

      По своей сути любая строка больше 1 символа будет массивно не зависимо от языка

    • @sleepyNovember_project
      @sleepyNovember_project 8 місяців тому

      @@ikakSlohno класс стринг это буквально один из STL-вских контейнеров, и это классно, изучил например «map» контейнер и почти со всеми более менее можешь обращаться (а вот у multi-контейнеров мб свои ньансы).
      Сегодня тупил над shrink_to_fit() методом у string, но озарило, я инициализировал по размеру нулями так:
      string st(64, '\0');
      Туда например добавлялось всего 3 символа, остальные оставались нули, shrink_to_fit их не обрезал.
      А просто надо было размер не так инициализировать а через метод «reserve»...
      Так то там похоже для std::string терминирующий ноль не особо нужен

  • @vikont7596
    @vikont7596 6 років тому +71

    Проорал с нуля на 6:48

    • @jellyfish6042
      @jellyfish6042 3 роки тому +1

      +

    • @but9l471
      @but9l471 3 роки тому +1

      ....Это не тоже самое что и ноль, вот такой....
      xDDDD

  • @ВиталийПивоварский-у7й

    Спасибо, Автор, ты лучший!

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +20

    #cтроки #SimpleCode #урокипрограммирования

  • @trimo1120
    @trimo1120 Рік тому

    Так. По названию можно понять, что строка, это массив символов. Вот мой код, до начала просмотра видео:
    void print(char *arr[]) {
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
    cout > str; но cin.getline может и с пробелами вывести
    print(&str);
    delete[] str;
    return 0;
    }

  • @артурайдаров-л6е
    @артурайдаров-л6е 7 років тому +5

    Спасибо за ваши уроки)

  • @sabatonbaton6105
    @sabatonbaton6105 4 роки тому

    Спасибо за ваши уроки,Сергей

  • @spaysertm264
    @spaysertm264 Рік тому +2

    17:00 "...иногда полезно делать такие вещи и смотреть что получится..."
    Я, который еще на середине видео запустил в цикле for на 999 итераций вывод половины оперативки:🙉
    Жаль, вывело немного, но один раз мне даже выскочило исключение и сказало что я залез в недоступную часть памяти

  • @eterniumsoul
    @eterniumsoul 6 років тому +10

    Спасибо !

  • @alexgaran5339
    @alexgaran5339 4 роки тому +9

    К стати, а ведь strlen(условная переменная char) можно использовать вместо функции rand() по сути. Рандомно будет выводится число, покуда функция не упрется в терминатор.
    Еще раз спасибо за уроки, Сергей.

    • @NoName126-p1b
      @NoName126-p1b Рік тому

      Смысл залезать в чужую область памяти?

  • @АлисаИванова-е3щ
    @АлисаИванова-е3щ 2 роки тому

    Огромное спасибо за ваш труд! Уроки очень понятные и информативные)

  • @mr.warpunch6007
    @mr.warpunch6007 2 роки тому +1

    Ролик класс, спасибо!

  • @СергейМедведев-т9т
    @СергейМедведев-т9т 3 роки тому +1

    Благодарю!

  • @TheWladberlin
    @TheWladberlin 5 років тому +15

    Сергей, не забывай, плиз, буковки побольше делать, совсем ни хр.. не видно, прям на самой велосипедной теме!.. ;/

  • @SeshAlex
    @SeshAlex 6 років тому +3

    Канкотенация строк, о ужас, заготовил на всякий случай кило антидипресантов... А в общем, как обычно, спасибо большое Сергей!

  • @ДмитрийБузницкий-б3н

    Спасибо, Сергей. Очень интересно!

  • @Ermine882
    @Ermine882 7 років тому +5

    Спасибо

  • @N_A_S_A_
    @N_A_S_A_ 10 місяців тому

    Просто Спасибо )

  • @justlitvik7260
    @justlitvik7260 4 роки тому +2

    Просто лучший!
    Проще посмотреть твои видео, чем сидеть на парах

  • @chelovechek7773
    @chelovechek7773 6 місяців тому

    спасибо!

  • @learning4702
    @learning4702 Рік тому

    "Примерно точно так-же само" - как по мне лучше и не скажешь)

    • @Empty_line
      @Empty_line Рік тому

      Умаляю вас можете помочь мне? у меня один вопрос!

  • @hotabmax6431
    @hotabmax6431 4 роки тому +1

    Очень интересно узнать о интерфейсе инструкций с++. Потому что я начал впринципе с него. Не считая бейсика, делфи html и java в техникуме.

  • @ДаймонСемецкий
    @ДаймонСемецкий 6 років тому +11

    Оставлю это здесь
    В информатике принято нуль перечеркивать обратным слэшем

    • @TheWladberlin
      @TheWladberlin 5 років тому +3

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

  • @cnhfgjy
    @cnhfgjy 2 роки тому +2

    Хороший урок, жаль только шрифт мелковат)

  • @ВасилийПопов-э7е
    @ВасилийПопов-э7е 4 роки тому +11

    15:04 - А что случилось с первыми тремя символами? Понятно, что каким-то образом изменилось значение в соответствующих байтах памяти, но каким именно?

    • @spartv1537
      @spartv1537 4 роки тому +3

      есть такие символы, которые трансформируют другие символы, скорее всего такие символы и попались.

  • @AShahabov
    @AShahabov 4 роки тому +1

    Получилось неожиданное, я ожидал что выполнение:
    char string[] = { 'H', 'e' };
    cout

    • @Сергей-т9д7в
      @Сергей-т9д7в 3 роки тому

      Компилятор видит разницу между массивом чисел и символов. Для адреса нужен амперсанд.

    • @arsIsv
      @arsIsv 2 роки тому

      @@Сергей-т9д7в спасибо

  • @o01122
    @o01122 8 місяців тому

    16:55 Строка это когда есть в конце /0, если его убрать то это просто массив.

  • @АлександрТимофейлох
    @АлександрТимофейлох 8 місяців тому

    не знаю говорил ли кто то об этом. автор упустил одну важную вещь, если strlen не учитывает ноль терминатор, это не значит что его нет в массиве, таким образом при работе с таким массивом и использованием sizeof может быть ошибка так как \0 занимает столько же места в массиве сколько и любой другой символ(1 байт).

  • @nazarbekbolatov5587
    @nazarbekbolatov5587 6 років тому +1

    Рахмет

  • @repetitor202
    @repetitor202 6 років тому +14

    на strlen ругает. если добавить #include , то все гуд (но у вас cstring нет, и все чудненько). может компилятор VS хитер?)

    • @igor9004
      @igor9004 6 років тому

      спасибо помогло )

    • @sultanamangeldiev1778
      @sultanamangeldiev1778 5 років тому

      ох, спасибо, два часа мучался, думая как это сделать.

  • @Rozalinaag
    @Rozalinaag 4 роки тому +3

    Почему никто не объяснит как работать с библиотекой стринг...

  • @ЕвгенийВладимирович-э9э

    14:13 Это же всё время называлось "кракозябрами", что за "непонятные символы" вдруг?

    • @Сергей-т9д7в
      @Сергей-т9д7в 3 роки тому +1

      Автор случайно делитнул библиотеку кракозябр, теперь все называется "непонятные символы".

  • @eugeneshklyarevich4905
    @eugeneshklyarevich4905 2 роки тому +1

    интересно, что cout по имени массива string вьіводит массив как строку.
    Если так обратиться к массиву интов, то вьіведет адрес, а если разьіменовать, то только значение, лежащее под 0м индексом

  • @pluto2656
    @pluto2656 7 років тому +5

    Лайк за "карячки"

    • @reefly9838
      @reefly9838 4 роки тому

      И краказябры

  • @АЛЕКС-ш2э3и
    @АЛЕКС-ш2э3и Рік тому +2

    Здравствуйте. А почему функция при подсчет символов, выводит число пять? Символов пять, но массив же считается с нуля. Значит 0, 1, 2, 3, 4..

    • @ItachiUchiha-wd5kk
      @ItachiUchiha-wd5kk 11 місяців тому +1

      Искал данный комментарий
      Автор скорее всего имел в виду счет с 1
      Если же считать с нуля, считая \0, то тоже получится 5

    • @sleepyNovember_project
      @sleepyNovember_project 11 місяців тому

      Всё же правильно, символов пять
      0, 1, 2, 3, 4 это и есть пять символов, вот и выводит пять.
      То есть в нулевой элемент массива записан какой-то символ, это уже считается 1 символ, ну и т.д.
      В общем похоже strlen просто выводит на человеческом языке, а не машинном
      P.S. Это как и с указанием размера массива...
      Указываешь что некий массив будет на 3 элемента, обращаешься к ним уже с нуля "0, 1, 2"

  • @АлександрПопов-ф8т

    Я при по-символьном заполнении массива вручную указал размерность массива и у меня в консоль не вывело никакого лишнего мусора.

  • @karenjantv2302
    @karenjantv2302 3 роки тому

    сделал дз, теперь можно и следующий видос смотреть

  • @qa337
    @qa337 4 роки тому +1

    *Ставьте скорость х2 и все норм.*

  • @twidgerry
    @twidgerry 4 роки тому +3

    у вас есть дискорт канал для консультаций? Привет из 2020

    • @morrigan_ghost
      @morrigan_ghost 4 роки тому +1

      а не много ты за бесплатно хочешь?

    • @twidgerry
      @twidgerry 4 роки тому

      @@morrigan_ghost ну мало ли, сообщество единомышленников для решения определённых вопросов )

  • @grays97
    @grays97 3 роки тому

    2:54 начало

  • @kirillpukhov2004
    @kirillpukhov2004 6 років тому +6

    "АСКИ" - это таблица ASCII?

  • @muhammadeshonjonov8758
    @muhammadeshonjonov8758 4 роки тому

    99 % видео это лекция !!!!!!!!!

  • @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ

    Спсб

  • @ulankenzhebek145
    @ulankenzhebek145 6 років тому +1

    Здравствуйте дорогой учитель
    Ваше видеоуроки мне очень нравится, вы все детально объясняете!!!
    Можете подсказать
    Я программирую на среде DevC++ и у меня выводит ошибка с strlen
    Почему ? Я все хорошо проверил но ошибка
    Может это из-за среды devc++ ?

    • @Алексей-в5н7с
      @Алексей-в5н7с 6 років тому

      Полный текст ошибки в студию

    • @akariamano5544
      @akariamano5544 5 років тому

      Функция strlen принадлежит не C++, а C. Возможно в этом проблема.

    • @Kokurorokuko
      @Kokurorokuko 5 років тому

      подключите cstring в начале

  • @theyandwe9047
    @theyandwe9047 5 років тому +2

    Не путать количество символов с количеством байтов в слове "Hello": символов 5, байтов 6.

    • @TheWladberlin
      @TheWladberlin 5 років тому +1

      Не в слове, а в выделенной памяти под массив. Каждый символ = 1байт, в том числе и '\0'

  • @dmitryefimkin6550
    @dmitryefimkin6550 Рік тому

    Спасибо.
    А если строкой является данные записанные в переменную из, например COM-порта? В составе пакета есть несколько полезных цифр на определенном месте и их надо записать в виде числа.
    Как это сделать?

    • @Empty_line
      @Empty_line Рік тому

      Умаляю вас можете помочь мне? у меня один вопрос!

  • @Sooderone
    @Sooderone 5 місяців тому

    🧠

  • @saharvkusni6209
    @saharvkusni6209 7 років тому +1

    Расскажи с чего начал путь программиста

    • @father1855
      @father1855 6 років тому

      Было уже, ищи на канале.

  • @Mr_Smith_1
    @Mr_Smith_1 10 місяців тому +2

    Привет из 2024

  • @michaelbondarev8788
    @michaelbondarev8788 4 роки тому +2

    голову сломал думая как 2 символа '\0' влезло в ячейку ЧАР, пока не понял что это просто эскейп последовательность

    • @CapyBarsTraining
      @CapyBarsTraining 4 роки тому

      Аналогичная ситуация. Спасибо за подсказку.)

  • @артурайдаров-л6е
    @артурайдаров-л6е 7 років тому +2

    #нахождение подстроки в строке плис)

  • @xXx-ws1gb
    @xXx-ws1gb 4 роки тому

    А как мне можно заменить из двух строк одинаковые слова на звёздочку?

  • @ubermenschliche1319
    @ubermenschliche1319 5 років тому +5

    6:12 *играет заглавная тема Терминатор*

  • @ВаняПодердерсдеханов

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

    • @xlSkyLinelx
      @xlSkyLinelx 6 років тому +7

      cin действует, как scanf в языке си, для этой функции символ пробела - это терминатор ввода данных в строку, все, что после пробела и до энтера вводится - в молоко. Так уж создали. Для обхода этого ограничения в си есть 2 функции - gets и fgets (fgets предпочтительнее, так как защищает от выстрела в ногу, не дает вводу выйти за пределы строки), в с++ - это getline(cin, имя строки). Есть еще cin.getline (имя строки, длина строки). При помощи этих функций можно вводить пробелы в строку и ввод терминируется исключительно энтером. Удачи в изучении сего прекрасного языка программирования :)

  • @kekuopex5783
    @kekuopex5783 4 роки тому

    Где ввод с клавиатуры?

  • @anbur9197
    @anbur9197 7 місяців тому

    Ну что, задачка на добавление элемента в любой индекс массива решена, а значит треть видеокурса успешно пройдена

  • @musheg25
    @musheg25 4 роки тому

    Здравствуйте помогите пожалуйста . Имеется массив char . В них значения меняются . Например.
    code[0] 0x01
    code[1] 0xfe
    code[2] 0x02
    code[3] 0xfd
    Надо переписать в переменную long int kod.
    Чтобы в переменную kod записалась так . 0x01fe02fd
    Как это сделать , помогите пожалуйста . Спасибо . IDE У меня CVAVR .

  • @ulankenzhebek145
    @ulankenzhebek145 6 років тому +1

    Хотел установить Visual Studio, но нетбук слабенький и не тянет(

    • @yurym7304
      @yurym7304 4 роки тому

      Можно старый VS поставить и радоваться жизни

  • @lanasvet1304
    @lanasvet1304 2 роки тому

    Подскажите, а как в С++ записать что строка состоит из цифры 3 и следующих за ней 57 цифр 5?

    • @arsIsv
      @arsIsv 2 роки тому +1

      Цикликом

  • @captain_ua
    @captain_ua 3 роки тому

    ДАЙТЕ ПОЖАЛУЙСТА iosteam! No such file directory!

  • @Andrsen86
    @Andrsen86 2 роки тому

    Что хранится в не инициализированной строке?

  • @useruser7176
    @useruser7176 3 роки тому

    а как можно выводить русские символы?

    • @meteor5567
      @meteor5567 3 роки тому +2

      почитай о setlocale в инете

  • @deniskozak5997
    @deniskozak5997 7 років тому

    у меня вопрос, каким образом можно создать строку, а уже потом инициализировать ее, как мы это делали с переменными.
    например.
    int a;
    a = 15;
    не так char string[ ];
    string = "Hello World";
    и не так не получается
    char string[];
    string[] = "Hello World";

    • @davidblbulyan3077
      @davidblbulyan3077 7 років тому +6

      Вот так можешь:
      char *string = new char[255];
      string = "Привет!";
      не забудь удалять string
      делается это так:
      delete [] string;

    • @СправаФея
      @СправаФея 7 років тому +4

      обязательно посмотри уроки #25 и #26 т.к. ты изначально неправильно объявляешь массив: char string[ ];
      если ты хочешь сперва объявить массив, а инициализировать позже - тебе при объявлении нужно обязательно указать количество элементов. либо использовать динамический массив, а не статический,)

    • @fillmalyshev9377
      @fillmalyshev9377 6 років тому +1

      char string[12]; string = "Hello World"

    • @Сергей-т9д7в
      @Сергей-т9д7в 3 роки тому

      Инициализировать неизвестную строку (массив) сложно - компилятор не знает сколько памяти под нее выделять.
      А с переменными все просто - независимо от значения ячейка занимает известное число байт.

  • @Viamsupervadetvadens
    @Viamsupervadetvadens 7 років тому

    up

  • @uninstaller1899
    @uninstaller1899 4 роки тому +1

    ничего не понимаю: зачем нужен терминирующий ноль если есть размер массива, который равен длине строки

    • @Сергей-т9д7в
      @Сергей-т9д7в 3 роки тому

      Массив из слов разной длины собирается через эти терминаторы.
      Плюс : особенность более низкоуровневых языков - даже очевидное на первый взгляд нужно прописывать руками.

  • @biscvie
    @biscvie 2 роки тому

    +

  • @maslonidze
    @maslonidze 4 роки тому

    айл би бэк

  • @tralex3684
    @tralex3684 5 років тому

    Hello

  • @АндрейДенисенко-э5б

    Вывести последние буквы всех слов введенной строки ( Кто может помочь с этим кодом?)

  • @ИгорьСамонов-ж3д
    @ИгорьСамонов-ж3д 7 років тому

    А почему компилятор пропускает "-" заместо оператора присваивания "=" в 13-й строке кода. Разве это не должно вызвать ошибку?

  • @TNT_ENTERTAINMENT_inc
    @TNT_ENTERTAINMENT_inc Рік тому

    Аски коды.

  • @ФулстекРазработчик

    Самое интересное, что в Linux если детерминирующий ноль не указать, то он все равно не покажет лишних символов. Интересно, с чем это связано? не ужели это настолько хорошее ядро по сравнению с тупым NT?

  • @janetteslow9812
    @janetteslow9812 6 років тому

    lfey

  • @Mishanya00
    @Mishanya00 Рік тому

    Не называйте свою переменную string. А то после не сможете объявлять строки класса string

  • @ebawer3892
    @ebawer3892 6 років тому

    Можно же вместо \0 писать NULL ???

    • @BadDanFeeds
      @BadDanFeeds 5 років тому +3

      Нет. \0 - это служебный символ с ASCII кодом 0, это не цифра. А NULL - это синоним цифры 0, которая является литералом с ASCII кодом 48. Не путай.

  • @pashakey4611
    @pashakey4611 5 років тому

    Я так понял,что в последний версии студии,символ " \0" пишется автоматически,достаточно оставить пустое место в конце массива,а при написании " \0",он, наоборот, исчезает,и появляется мусор.

  • @mcdestis1329
    @mcdestis1329 3 роки тому

    ахахах ноль терминатор

  • @KLiPSoN_YT
    @KLiPSoN_YT 4 роки тому

    Сколько воды, уснуть можно быстрее, чем дойти до момента объяснения...

  • @АртурГребешков-к6ж
    @АртурГребешков-к6ж 6 років тому +4

    Спасибо!

  • @outcast-cr5yy
    @outcast-cr5yy 6 років тому +2

    Спасибо

  • @Blendershick
    @Blendershick 4 роки тому

    Спасибо!

  • @КлешОфКланс-я3в
    @КлешОфКланс-я3в 4 роки тому

    Спасибо

  • @ВасяПупкин-п8ц7ц
    @ВасяПупкин-п8ц7ц 3 роки тому

    Спасибо !

  • @ЯрославГоловко-ф6и

    спасибо