這是我想要設置一段時間的代碼現在,我無法弄清楚爲什麼這不起作用。我用輸入中的sockaddr_in創建了一個簡單的函數。我希望它返回(不打印)包含與sockaddr_in關聯的IP的char *。sprintf打印或返回IP地址的問題
char* get_ip_from_sockaddr(struct sockaddr_in client_addr)
{
int a = (client_addr.sin_addr.s_addr&0xFF);
int b = (client_addr.sin_addr.s_addr&0xFF00)>>8;
int c = (client_addr.sin_addr.s_addr&0xFF0000)>>16;
int d = (client_addr.sin_addr.s_addr&0xFF000000)>>24;
char* ip[24];
int n = sprintf(ip, "%d.%d.%d.%d", a, b, c, d);
printf("%s", ip); // The IP is correctly printed
return ip;
}
我檢索IP這樣的:
char* ip = get_ip_from_sockaddr(client_addr);
printf("IP CLIENT: %s\n", ip);
這裏是我PROGRAMM的輸出:
127.0.0.1IP CLIENT: �����
我不明白爲什麼這是正確的函數內部打印,但當我從功能檢索IP不打印。
有這樣做的標準函數 - ['inet_aton'](http://linux.die.net/man/3/inet_aton)。 – myaut
我不明白。你爲什麼使用數組char *來存儲IP地址? – madz