Массив char через указатель

Спасибо. теперь я понял .

buf_eep - это и есть указатель на нулевой элемент массива, зачем там звездочка?

Нагляднее, по моему, buf_eep[i]

Смотря как объявить. Если как массив char - да, а если как массив указателей char - хз.

и всплыл еще вопрос…
char buf_eep[20]={0};
все таки требует выделение памяти вручную , или она выделится автоматически ?
Просто заполнение этого массива в цикле ведет к глючному поведению… где-то на 12 строке выкидывает из процедуры void list_sort(void) . такое впечатление ,что что-то не то с выделением памяти…

Она выделяется без участия программиста.

1 лайк

Память уже выделена. Вручную не надо.

1 лайк

Понял спасибо… видимо проблема в чем-то другом

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

Это не я так думаю, а ТС. Я отвечал на его вопрос (с кодом).

Ой. Не посмотрел кому отвечаю, конечно же вопрос к карасику.

нет, я 0 потом забиваю в цикле. {0} использую для инициализации , т.к читал , что если просто обьявить без инициализации , то потом придется выделять память вручную… поэтому советуют использовать {0}? а не просто обьявлять… Если не прав… поправьте
точнее ‘\0’

Неправ. Поправляю.

т.е можно просто char byf_eep[20]; и массив все равно будет работать как надо…

Смотря что понимать под НОРМАЛЬНО. Память выделится статически, но содержимое всех элементов будет неопределенным.

Да я это понимаю…

а так?

И так

Не понимаю, что мешает сделать

for (uint8_t i = 0; i < 20; ++i) buf_eep[i] = 0x00;
или
memset(buf_eep, 0x00, 20);

И старайся избегать “магических чисел” в коде

я так вначале и пытался сделать , мне написали, что символьный массив нужно очищать ‘\0’ , а не 0 …