2012-05-21 5 views
0

У меня есть функция ниже, которая отправляет message в next_hop (например, 192.168.0.10) в качестве одноадресной передачи UDP. Когда я скомпилирую код, я получаю следующее предупреждение passing argument 2 of 'sendto' makes pointer from integer without a cast для строки if(sendto(s, *message, BUFSIZE, 0, &si_other, slen) == -1). Как я могу исправить код? Спасибо за ответы.sendto() - Unicast UDP в C

void log_msg_send(char *message, char *next_hop){ 

struct sockaddr_in si_other; 
int s, slen = sizeof(si_other); 
int port_no = 3333; 
char *nexthop; 
unsigned short Server_port; 
nexthop = next_hop; 
Server_port = port_no; 

if((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { 
    fprintf(stderr,"socket error"); 
    exit(1); 
} 

memset((char *) &si_other, 0, sizeof(si_other)); 
si_other.sin_family = AF_INET; 
si_other.sin_port = htons(Server_port); 

if(inet_aton(nexthop, &si_other.sin_addr) == 0){ 
    fprintf(stderr,"socket error"); 
    exit(1); 
} 

if(sendto(s, *message, BUFSIZE, 0, &si_other, slen) == -1){ 
    fprintf(stderr,"socket error"); 
    exit(1); 
} 

close(s); 

}

+0

Почему вы разыскиваете 'сообщение' в любом случае? – zneak

+0

Я удалил *, теперь я получаю следующее предупреждение: «Передача аргумента 5« sendto »из несовместимого типа указателя» – johan

ответ

2
char * message 

Средства:

(char *) message // message is a pointer-to-char 

И:

char (*message) // *message is a char 

Так что, когда вам нужно пройти char*, используйте message. Если вам нужен первый символ в этом буфере, используйте *message.


Предупреждение:

char * a, b; 

Делает achar*, но b простой char, где бы вы ни пробела.


Пятый аргумент, возможно, должны быть поданы в struct sockaddr* вручную, в зависимости от того, как это прототип на вашей системе.

Смежные вопросы