gcc: error: запрос на членство в rlen, не являющемся структурой или объединением - PullRequest
0 голосов
/ 03 октября 2011

У меня есть указатель на неподписанный символ, который содержит структуру. Теперь я хочу сделать следующее

unsigned char *buffer ;

//code to fill the buffer with the relavent information.

int len = ntohs((record_t*)buffer->len);

где структура record_t содержит поле с именем len. Я не могу этого сделать и получаю сообщение об ошибке.

error: request for member ‘len’ in something not a structure or union.

что я тут не так делаю?

Ответы [ 4 ]

5 голосов
/ 03 октября 2011

в C вы не можете просто взять buffer->len, потому что он анализируется, как если бы окончательный результат buffer->len был приведен к record_t *. Попробуйте

((record_t *)buffer)->len
3 голосов
/ 03 октября 2011

Если вы уверены, что делаете все правильно (хотя это выглядит очень хакерски), вам просто нужно правильно определить приоритет оператора:

ntohs( ((record_t*)buffer)->len );
3 голосов
/ 03 октября 2011

Попробуйте ((record_t*)buffer)->len

Вы приводите buffer->len к record_t*,, когда вы хотите выполнить buffer к record_t, а затем получаете значение len.

2 голосов
/ 03 октября 2011

Приоритет -> выше, чем у актеров. Добавьте несколько круглых скобок соответственно.

...