Заполнение поля массива внутри структуры - PullRequest
1 голос
/ 04 февраля 2012

Хорошо, я помещаю всю структуру здесь, ее спецификацию протокола с именем openflow, который реализован в некоторых промышленных коммутаторах, поэтому структура выглядит так:данные в последнем поле - uint8_t data[0], которые можно варьировать, и информация собирается из поля длины внутри заголовка.Я должен создать пакет, и для этого должны быть введены данные. Пожалуйста, посмотрите.

Ответы [ 3 ]

1 голос
/ 04 февраля 2012

Вам нужно будет использовать динамическое размещение и скопировать содержимое.

Что-то вроде:

#include <stdlib.h>
#include <string.h>

void foo(void) {
  struct some_struct *container = malloc(sizeof(struct some_struct) + 100);
  if (!container) {
    // handle out-of-memory situation
  }
  memcpy(container->data, some_data, 100);
}
0 голосов
/ 04 февраля 2012

Вы не можете.

Вы определили размер some_struct.data как 0 , то есть он не может содержать какие-либо элементы.
Если всеВы хотите, чтобы скопировать Макс.100 предметов в нем, тогда вы можете определить размер статически:

struct some_struct { 
char data[100];  // some_struct.data has room for up to 100 characters 
};
0 голосов
/ 04 февраля 2012

Вы не можете сделать это. Это не подходит! Массив в структуре имеет длину 0 символов, и вы пытаетесь вставить в него массив из 100 символов.

Если по какой-то причине вы уверены, что память после структуры доступна, например, Вы только что сделали это так:

some_struct *foo = (some_struct*)malloc(sizeof(some_struct) + 100);

Тогда вы можете сделать это:

memcpy(foo->data, some_data, 100);

Это отвратительно и, вероятно, все еще неопределенное поведение, но я видел API, которые требуют этого (Windows?).

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