А если внутри функции нам нужно работать не только с золотом, но и с кучей других атрибутов, то так лучше поступать? Передавать структуру и возвращать структуру или передавать указатель на структуру и менять ее поля?
Под конец у меня читались только первые 3 символа имени, я смотрю и не у меня одного такая проблема, но я хочу своим наблюдением поделиться, если вместо sizeof(nickname) указать просто число, то проблемы не будет
нужно добавить в hello(nikname, sizeof(nikname)); в самой функции hello(char *nikname, int len_nikname) и естественно в функции sizeof(nikname) заменить на len_nikname.
у меня, после разделения на функции, в hello(), при использовании указателя, имя обрезается до 3 символов, вне зависимости от того, сколько символов я даю на ввод в чем может быть проблема?
Спустя месяц до меня наконец то дошло. В функции hello() мы вызываем функцию fgets() и как 2 аргумент указываем: sizeof(nickname), но в функцию как аргумент мы передали указатель на 1 элемент массива, то есть по факту этот sizeof() возвращает размер 1 элемента массива. Чтобы исправить это можно при вызова функции hello() указать второй аргумент как размерность массива: hello(nickname,10);. И при определении функции написать уже hello(char * nickname,int n). И дальше как второй аргумент фукнции fgets() указать sizeof(nickname) * n, то есть fgets(nickname, sizeof(nickname) * n, stdin). После этого все работает.
я только начал изучать программирование и начал как это ни странно свою 11 попытку я начал с ассемблера и языка С и мне вроде всё пока понятно. Но имхо на мой взгляд использовать массивы в качестве строк это извращение какое-то (хотя я при этом понимаю, что это ограничение языка) ps: забыл сказать, что это в остальных 10 попытках освоить программирование я до этого всегда пытался начать с С++. На 11 раз до меня наконец дошло, что вообще происходит в подобных языках низкоуровневых. В основном это конечно заслуга хороших менторов (в т.ч. таких как автор этих видеоуроков), ну и старых книг по программированию, вроде тех, где объясняется как работают процессоры Mos 6502 и intel 8080 ну и конечно же начала книги Петцольда - Код: тайный язык информатики. Имхо без знания основ информатики разобраться в этой абра-кадабре довольно сложно (лично мне) Автору канала выражаю Огромную благодарность за раздупление такого важного и интересного материала.
у меня почему то sizeof(nickname) по умолчанию принимает всего 4 байта, хотя nickname[8] но когда я убираю nickname[8] из int main и переношу её в int hello то всё работает исправно, как исправить?
Тоже кайфую от этой серии обучения. Супер!
С большим интересом посмотрел, спасибо! Давай еще! )
Спаибо, добрый человек, что делитесь с нами своим опытом!
здравствуйте! Отличные и интересные видеоролики. Успехов Вам в технической части и продвижении канала.
Amazing lessons! Thx you teacher🙏
А про ООП планируешь рассказать в таком же формате?
дойдем и до ооп)
@@webpomosh отлично!
А если внутри функции нам нужно работать не только с золотом, но и с кучей других атрибутов, то так лучше поступать? Передавать структуру и возвращать структуру или передавать указатель на структуру и менять ее поля?
Под конец у меня читались только первые 3 символа имени, я смотрю и не у меня одного такая проблема, но я хочу своим наблюдением поделиться, если вместо sizeof(nickname) указать просто число, то проблемы не будет
нужно добавить в hello(nikname, sizeof(nikname)); в самой функции hello(char *nikname, int len_nikname) и естественно в функции sizeof(nikname) заменить на len_nikname.
у меня, после разделения на функции, в hello(), при использовании указателя, имя обрезается до 3 символов, вне зависимости от того, сколько символов я даю на ввод
в чем может быть проблема?
У меня такая же проблема
аналогично, проверял в онлайн компиляторах, там все нормально работает
я такая же фигня
Спустя месяц до меня наконец то дошло. В функции hello() мы вызываем функцию fgets() и как 2 аргумент указываем: sizeof(nickname), но в функцию как аргумент мы передали указатель на 1 элемент массива, то есть по факту этот sizeof() возвращает размер 1 элемента массива.
Чтобы исправить это можно при вызова функции hello() указать второй аргумент как размерность массива: hello(nickname,10);. И при определении функции написать уже hello(char * nickname,int n). И дальше как второй аргумент фукнции fgets() указать sizeof(nickname) * n, то есть fgets(nickname, sizeof(nickname) * n, stdin). После этого все работает.
Если ещё остались коды, можешь скинуть скрин, немного не понимаю что за n
я только начал изучать программирование и начал как это ни странно свою 11 попытку я начал с ассемблера и языка С и мне вроде всё пока понятно. Но имхо на мой взгляд использовать массивы в качестве строк это извращение какое-то (хотя я при этом понимаю, что это ограничение языка)
ps: забыл сказать, что это в остальных 10 попытках освоить программирование я до этого всегда пытался начать с С++. На 11 раз до меня наконец дошло, что вообще происходит в подобных языках низкоуровневых. В основном это конечно заслуга хороших менторов (в т.ч. таких как автор этих видеоуроков), ну и старых книг по программированию, вроде тех, где объясняется как работают процессоры Mos 6502 и intel 8080 ну и конечно же начала книги Петцольда - Код: тайный язык информатики. Имхо без знания основ информатики разобраться в этой абра-кадабре довольно сложно (лично мне)
Автору канала выражаю Огромную благодарность за раздупление такого важного и интересного материала.
у меня почему то sizeof(nickname) по умолчанию принимает всего 4 байта, хотя nickname[8] но когда я убираю nickname[8] из int main и переношу её в int hello то всё работает исправно, как исправить?
когда в функции прописал nickname ник больше 3 символов почему то не выводит .
У меня также, с момента написания твоего коммента прошёл год, ты случаем не нашёл ошибку?)
Классно)
Крутооо!!!