Пустой указатель на структуры доступа в массиве символов - PullRequest
3 голосов
/ 28 апреля 2011

У меня есть буфер, по сути массив char, заполненный несколькими различными структурами.Структуры должны быть переданы в буфер, как этот, потому что это то, что я читаю / пишу в сокет.Структуры - это одна структура заголовка и, возможно, структуры с «несколькими полезными данными».

Просто для иллюстрации, это выглядит так:

unsigned char buffer[buflen];
struct header *head;
struct payload1 *p1;
struct payload2 *p2;

etc...

Теперь, когда я пытаюсь заполнить этот буфер или получитьиз этого буфера я использовал void *ptr, где он сначала инициализируется в позиции буфера, а затем в позиции после заголовка, например:

void *ptr;

ptr = &buffer;
ptr += sizeof(header);

Это на самом деле работает нормально - т.е.указатель указывает на правильное расположение в памяти, и я могу получить (или вставить) новую структуру полезной нагрузки, но, тем не менее, он генерирует предупреждение в gcc.warning: pointer of type ‘void *’ used in arithmetic.

Что я могу сделать, чтобы избежать этого предупреждения в этом случае?

1 Ответ

4 голосов
/ 28 апреля 2011

Используйте char * вместо void *.Проблема в том, что не очевидно, что должно делать увеличение void *.Я ожидаю, что это будет скорее ошибкой, чем предупреждением.

...