Это не проблема доступа к элементам.Это все, что вы делаете правильно.
Вот некоторые вещи, которые не так.Во-первых, вы не выделяете достаточно места для hermes
структуры, просто для указателя.Тогда, даже если вы malloc( sizeof ( struct hermes ) );
, один элемент (api
) является неинициализированным указателем.Вы не можете просто следовать неинициализированным указателям вглубь структуры данных, потому что они будут указывать на то, кто знает, где находится память.Сначала вам нужно выделить что-то, на что h->api
будет указывать.Тогда вам нужно выделить место для h->api->search_response
.Если вы все это исправите, то скопируете строку в ... кто знает где?Вы должны использовать strdup
, а не strcpy
, чтобы создать новую строку, тогда вы должны присвоить возвращаемое значение result_code
.Кроме того, в вашем союзе есть только один элемент, поэтому он бессмысленно (если только вы не отправили в него что-то еще).
EDIT Вот один из способов инициализации h
:
h = malloc( sizeof( struct hermes ) );
h->api = malloc( sizeof( *h->api ) );
h->api->search_response = malloc( sizeof( h->api->search_response ) );
h->api->search_response->result_code = strdup( "123" );
Обратите внимание, что в программе с хорошим поведением, которая выполняет очистку после себя, каждое из этих выделений также должно быть освобождено по отдельности, в порядке, обратном вызовам malloc
.Поскольку вы немедленно звоните exit(0)
, в этом случае никакого вреда не будет.