Как структуры присваиваются массиву структур, содержащихся в структуре в C? - PullRequest
1 голос
/ 05 марта 2020

У меня проблемы с этим. Допустим, есть просто простая настройка структуры, например, так:

typedef struct http_header
{
    char *name;
    char *value;
} http_header_t;

typedef struct http_request
{
    char *verb;
    char *path;
    char *version;
    int num_headers;
    http_header_t headers[MAX_HEADERS];
} http_request_t;

Как мне записать новый http_header_t в headers в новом http_request_t?

1 Ответ

2 голосов
/ 05 марта 2020

Вы можете «писать» в него, просто обращаясь к ним и назначая их, как любой другой компонент структуры. Массив структур заголовков объявлен явно в структуре запроса, поэтому они уже будут «присутствовать» в новой структуре запроса (их будет выделено MAX_HEADERS независимо от того, используете ли вы их все или нет). Вы получаете доступ к ним по индексу:

http_request_t request;
request.headers[0].name = ...

Если у вас уже есть структура заголовка из другого места, которую вы хотите «скопировать» в запрос, есть несколько способов сделать это, и что является наиболее идиоматическим c зависит от контекста.

Похоже, что это настроено так, что num_headers указывает, сколько структур заголовков в этом массиве содержат действительные данные (даже если их может быть больше, выделенных и неиспользованных). Если вы добавляете новый из другого объекта заголовка, вы можете назначить и затем увеличить счетчик, например:

request.headers[request.num_headers] = some_header_obj;
request.num_headers++;

Et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...