Адрес в третьем вызове должен быть:
l->db.param_key.param_name + strlen(g->program_id_DB) + 1
Обратите внимание, что для T * p
выражение p[i];
идентично *(p + i)
. Вы не хотите разыменования, вам нужен адрес, поэтому вы просто добавляете к указателю.
(также верно, что p + i
идентичен &p[i]
, пока i
является действительным индексом.)
Также обратите внимание, что никто не заметил, что ваша первая строка неверна, и вы должны просто сказать l->db.param_key.param_name
(или эквивалентно &l->db.param_key.param_name[0]
).