Строки в с++. Нуль терминатор. Что такое строка в с++. char c++ массив. С++ Для начинающих. Урок #60
HTML-код
- Опубликовано: 7 авг 2017
- Понравилось видео или оказалось полезным? Подпишись!
Строки в с++ .Нуль терминатор. Что такое строка в с++. char c++ массив. С++ Для начинающих. Урок #60
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
Ирония: Автор допустил нас к "hello world"у только на 60ю лекцию. :D
после того как к прошлому уроку я писал функцию вставляющую в массив значение введенное с консоли по индексу в любое место массива, этот урок прям легко пошел почему-то)))
Не расслабляйся, я заглядывал вперед,... там охренеть! ))
@@Alex-hs8xj та же фигня, на удивление функции эти я сочинил довольно быстро.
Дякую.Ви дуже добре пояснюєте.Хороші уроки)
)
Дякую, це найкращий курс з С++ на youtube!!!
Будь ласка!
@@vylvhhh ну, как основа, лучшие
Просмотрел 18 минут на одном дыхании, автор ты победил!
Сергей, у Вас самые качественные ролики по программированию, спасибо большое, если бы не Вы, то я, скорее всего просто забросил программирование из-за многих недопониманий)
Спасибо большое за уроки! Все объясняется очень доступно даже для самого начинающего. Из всего многообразия информации - у Вас получается доносить её максимально последовательно и полно.
Не могли бы Вы сделать уроки по структурам и по файлам, а так же по работе с ними?
Предыдущий урок я буду носить с собой на флешке :D
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
Спасибо за ваши уроки,Сергей
Огромное спасибо за ваш труд! Уроки очень понятные и информативные)
Проорал с нуля на 6:48
+
....Это не тоже самое что и ноль, вот такой....
xDDDD
Сергей, спасибо большое за работу! Береги себя!
Умаляю вас можете помочь мне? у меня один вопрос!
Спасибо за ваши уроки)
Спасибо, Сергей. Очень интересно!
привет из 2023! Спасибо большое за уроки!
2024
2025
Спасибо, Автор, ты лучший!
Мой лайк 5000-й! Спасибо за урок!
Хорошие уроки, как раз то что нужно начинающему программисту. Если бы еще по каждому уроку были домашние задания с ответами (не видео, а текст): посмотрел урок, сделал домашку по уроку на закрепление материала.... А так долго приходится искать примеры программ на закрепление пройденного материала. БОЛЬШОЕ СПАСИБО ЗА ВАШИ ВИДЕО УРОКИ!!!!
Сергей, искренне благодарен Вам за ваше старание
@@Empty_line что именно?
Сергей, спасибо огромное!
Для тех кто обучается используя Dev-C++: что бы вызвать функцию strlen() нужно подключить заголовочный файл строчкой #include в самом начале программы.
что бы, исправь пж молодой, так же красивее
спасибо
Спасибо
Ролик класс, спасибо!
Спасибо!
Рисуешь как Бог!)
Благодарю!
Спасибо
#cтроки #SimpleCode #урокипрограммирования
Просто Спасибо )
Просто лучший!
Проще посмотреть твои видео, чем сидеть на парах
У std::string так же можно обращаться к элементам строки
string word = "Hello";
cout
Потому что std::string это обертка под char[] и из-за этого он работает так же как массив
По своей сути любая строка больше 1 символа будет массивно не зависимо от языка
@@ikakSlohno класс стринг это буквально один из STL-вских контейнеров, и это классно, изучил например «map» контейнер и почти со всеми более менее можешь обращаться (а вот у multi-контейнеров мб свои ньансы).
Сегодня тупил над shrink_to_fit() методом у string, но озарило, я инициализировал по размеру нулями так:
string st(64, '\0');
Туда например добавлялось всего 3 символа, остальные оставались нули, shrink_to_fit их не обрезал.
А просто надо было размер не так инициализировать а через метод «reserve»...
Так то там похоже для std::string терминирующий ноль не особо нужен
К стати, а ведь strlen(условная переменная char) можно использовать вместо функции rand() по сути. Рандомно будет выводится число, покуда функция не упрется в терминатор.
Еще раз спасибо за уроки, Сергей.
Смысл залезать в чужую область памяти?
Сергей, не забывай, плиз, буковки побольше делать, совсем ни хр.. не видно, прям на самой велосипедной теме!.. ;/
О, да, чуть глаза не сломал!
Рахмет
спасибо
Так. По названию можно понять, что строка, это массив символов. Вот мой код, до начала просмотра видео:
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;
}
Очень интересно узнать о интерфейсе инструкций с++. Потому что я начал впринципе с него. Не считая бейсика, делфи html и java в техникуме.
17:00 "...иногда полезно делать такие вещи и смотреть что получится..."
Я, который еще на середине видео запустил в цикле for на 999 итераций вывод половины оперативки:🙉
Жаль, вывело немного, но один раз мне даже выскочило исключение и сказало что я залез в недоступную часть памяти
Ловушки Джокера делаешь
не знаю говорил ли кто то об этом. автор упустил одну важную вещь, если strlen не учитывает ноль терминатор, это не значит что его нет в массиве, таким образом при работе с таким массивом и использованием sizeof может быть ошибка так как \0 занимает столько же места в массиве сколько и любой другой символ(1 байт).
Здравствуйте. А почему функция при подсчет символов, выводит число пять? Символов пять, но массив же считается с нуля. Значит 0, 1, 2, 3, 4..
Искал данный комментарий
Автор скорее всего имел в виду счет с 1
Если же считать с нуля, считая \0, то тоже получится 5
Всё же правильно, символов пять
0, 1, 2, 3, 4 это и есть пять символов, вот и выводит пять.
То есть в нулевой элемент массива записан какой-то символ, это уже считается 1 символ, ну и т.д.
В общем похоже strlen просто выводит на человеческом языке, а не машинном
P.S. Это как и с указанием размера массива...
Указываешь что некий массив будет на 3 элемента, обращаешься к ним уже с нуля "0, 1, 2"
Оставлю это здесь
В информатике принято нуль перечеркивать обратным слэшем
ага. для того чтобы отличать от буквы "О". Правда только прямым слешем, не обратным
на strlen ругает. если добавить #include , то все гуд (но у вас cstring нет, и все чудненько). может компилятор VS хитер?)
спасибо помогло )
ох, спасибо, два часа мучался, думая как это сделать.
15:04 - А что случилось с первыми тремя символами? Понятно, что каким-то образом изменилось значение в соответствующих байтах памяти, но каким именно?
есть такие символы, которые трансформируют другие символы, скорее всего такие символы и попались.
Спсб
интересно, что cout по имени массива string вьіводит массив как строку.
Если так обратиться к массиву интов, то вьіведет адрес, а если разьіменовать, то только значение, лежащее под 0м индексом
сделал дз, теперь можно и следующий видос смотреть
"Примерно точно так-же само" - как по мне лучше и не скажешь)
Умаляю вас можете помочь мне? у меня один вопрос!
16:55 Строка это когда есть в конце /0, если его убрать то это просто массив.
Хороший урок, жаль только шрифт мелковат)
Получилось неожиданное, я ожидал что выполнение:
char string[] = { 'H', 'e' };
cout
Компилятор видит разницу между массивом чисел и символов. Для адреса нужен амперсанд.
@@user-qu5ch6rl4f спасибо
Канкотенация строк, о ужас, заготовил на всякий случай кило антидипресантов... А в общем, как обычно, спасибо большое Сергей!
Здравствуйте помогите пожалуйста . Имеется массив char . В них значения меняются . Например.
code[0] 0x01
code[1] 0xfe
code[2] 0x02
code[3] 0xfd
Надо переписать в переменную long int kod.
Чтобы в переменную kod записалась так . 0x01fe02fd
Как это сделать , помогите пожалуйста . Спасибо . IDE У меня CVAVR .
Почему никто не объяснит как работать с библиотекой стринг...
А как мне можно заменить из двух строк одинаковые слова на звёздочку?
#нахождение подстроки в строке плис)
Я при по-символьном заполнении массива вручную указал размерность массива и у меня в консоль не вывело никакого лишнего мусора.
Здравствуйте дорогой учитель
Ваше видеоуроки мне очень нравится, вы все детально объясняете!!!
Можете подсказать
Я программирую на среде DevC++ и у меня выводит ошибка с strlen
Почему ? Я все хорошо проверил но ошибка
Может это из-за среды devc++ ?
Полный текст ошибки в студию
Функция strlen принадлежит не C++, а C. Возможно в этом проблема.
подключите cstring в начале
Лайк за "карячки"
И краказябры
Ну что, задачка на добавление элемента в любой индекс массива решена, а значит треть видеокурса успешно пройдена
Спасибо.
А если строкой является данные записанные в переменную из, например COM-порта? В составе пакета есть несколько полезных цифр на определенном месте и их надо записать в виде числа.
Как это сделать?
Умаляю вас можете помочь мне? у меня один вопрос!
Где ввод с клавиатуры?
Интересно почему когда при вводе массива char ввести больше одного пробела , то программа перестает нормально работать.
И вообще чтобы ввести нормальную строчку из нескольких слов разделенных пробелами необходимо создать несколько массивов, которые автоматически заканчиваются когда вводишь пробел и начинается ввод нового. Почему в массив не записываются пробелы? Для ввода массива использовал cin.
cin действует, как scanf в языке си, для этой функции символ пробела - это терминатор ввода данных в строку, все, что после пробела и до энтера вводится - в молоко. Так уж создали. Для обхода этого ограничения в си есть 2 функции - gets и fgets (fgets предпочтительнее, так как защищает от выстрела в ногу, не дает вводу выйти за пределы строки), в с++ - это getline(cin, имя строки). Есть еще cin.getline (имя строки, длина строки). При помощи этих функций можно вводить пробелы в строку и ввод терминируется исключительно энтером. Удачи в изучении сего прекрасного языка программирования :)
2:54 начало
Привет из 2024
"АСКИ" - это таблица ASCII?
Геениий!
Подскажите, а как в С++ записать что строка состоит из цифры 3 и следующих за ней 57 цифр 5?
Цикликом
у вас есть дискорт канал для консультаций? Привет из 2020
а не много ты за бесплатно хочешь?
@@morrigan_ghost ну мало ли, сообщество единомышленников для решения определённых вопросов )
Расскажи с чего начал путь программиста
Было уже, ищи на канале.
up
Не путать количество символов с количеством байтов в слове "Hello": символов 5, байтов 6.
Не в слове, а в выделенной памяти под массив. Каждый символ = 1байт, в том числе и '\0'
у меня вопрос, каким образом можно создать строку, а уже потом инициализировать ее, как мы это делали с переменными.
например.
int a;
a = 15;
не так char string[ ];
string = "Hello World";
и не так не получается
char string[];
string[] = "Hello World";
Вот так можешь:
char *string = new char[255];
string = "Привет!";
не забудь удалять string
делается это так:
delete [] string;
обязательно посмотри уроки #25 и #26 т.к. ты изначально неправильно объявляешь массив: char string[ ];
если ты хочешь сперва объявить массив, а инициализировать позже - тебе при объявлении нужно обязательно указать количество элементов. либо использовать динамический массив, а не статический,)
char string[12]; string = "Hello World"
Инициализировать неизвестную строку (массив) сложно - компилятор не знает сколько памяти под нее выделять.
А с переменными все просто - независимо от значения ячейка занимает известное число байт.
99 % видео это лекция !!!!!!!!!
Хотел установить Visual Studio, но нетбук слабенький и не тянет(
Можно старый VS поставить и радоваться жизни
*Ставьте скорость х2 и все норм.*
ДАЙТЕ ПОЖАЛУЙСТА iosteam! No such file directory!
6:12 *играет заглавная тема Терминатор*
голову сломал думая как 2 символа '\0' влезло в ячейку ЧАР, пока не понял что это просто эскейп последовательность
Аналогичная ситуация. Спасибо за подсказку.)
14:13 Это же всё время называлось "кракозябрами", что за "непонятные символы" вдруг?
Автор случайно делитнул библиотеку кракозябр, теперь все называется "непонятные символы".
ничего не понимаю: зачем нужен терминирующий ноль если есть размер массива, который равен длине строки
Массив из слов разной длины собирается через эти терминаторы.
Плюс : особенность более низкоуровневых языков - даже очевидное на первый взгляд нужно прописывать руками.
А почему компилятор пропускает "-" заместо оператора присваивания "=" в 13-й строке кода. Разве это не должно вызвать ошибку?
+
а как можно выводить русские символы?
почитай о setlocale в инете
Что хранится в не инициализированной строке?
мусор
айл би бэк
Hello
Вывести последние буквы всех слов введенной строки ( Кто может помочь с этим кодом?)
Дай угадаю, Яндекс практикум?))
@@Sylvadorr Не, одно задание из курсовой)
@@Sylvadorr а у тебя есть ответ?)
Аски коды.
lfey
Самое интересное, что в Linux если детерминирующий ноль не указать, то он все равно не покажет лишних символов. Интересно, с чем это связано? не ужели это настолько хорошее ядро по сравнению с тупым NT?
Можно же вместо \0 писать NULL ???
Нет. \0 - это служебный символ с ASCII кодом 0, это не цифра. А NULL - это синоним цифры 0, которая является литералом с ASCII кодом 48. Не путай.
Не называйте свою переменную string. А то после не сможете объявлять строки класса string
Я так понял,что в последний версии студии,символ " \0" пишется автоматически,достаточно оставить пустое место в конце массива,а при написании " \0",он, наоборот, исчезает,и появляется мусор.
ахахах ноль терминатор
Сколько воды, уснуть можно быстрее, чем дойти до момента объяснения...
Спасибо !
Пожалуйста!
Спасибо
Спасибо!
Спасибо !
Спасибо
Спасибо