Почему требуется набрать указатель типа? - PullRequest
2 голосов
/ 23 октября 2010

Привет, специалист по программированию на C

Я не эксперт в C. Я пытаюсь найти ответ для передачи php c struct data через программирование сокетов

Поэтому я начинаю новую тему, чтобы спросить конкретно о языке C

ниже приведены данные:

typedef struct
{
  UI2             todo;   
  char            rz[LNG_RZ + 1]; 
  char            saId[LNG_SAT_ID + 1]; 
  char            user[LNG_USER + 1]; 
  char            lang[LANGLEN + 1]; 
  SI4             result;       
  UI4             socket;  
  char            text[LNG_ALLG + 1]; 
  char            filename[MAX_PATHLEN];
}  dmsAuf_Head; 

И эти данные необходимо отправить через сокет через:

rval = send(dms_aufHead->socket, (char *) dms_aufHead, sizeof(dmsAuf_Head), 0);

Почему требуется набрать данные через

(символ *) dms_aufHead

перед отправкой через сокет?

Не могли бы вы, ребята, угадать? Вы не возражаете, объясняя в терминах abit layman. Спасибо.

Ответы [ 3 ]

3 голосов
/ 23 октября 2010

Я не знаю, является ли это опечаткой или нет, но вам не нужно приводить к char*, но вы забыли взять адрес вашей переменной с помощью оператора &.Затем send принимает указатель void const* для буфера, так что все должно быть в порядке.Это должно сделать это:

rval = send(dms_aufHead->socket, &dms_aufHead, sizeof(dmsAuf_Head), 0);
0 голосов
/ 24 октября 2010

Вам не нужно навести указатель.send принимает аргумент const void *, и просто взятие адреса вашей структуры автоматически преобразует в void *.

0 голосов
/ 23 октября 2010

Функция отправки требует аргумент char *.Это единственная причина.Типы, передаваемые в функцию, должны быть правильными.

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