Рассмотрим следующую программу:ошибки сегментации при печати inet_ntoa функции
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <netdb.h>
void printhost(char* pLocalHostAddress)
{
struct hostent * pHost;
struct in_addr **pptr;
char hostName[128]="\0";
gethostname(hostName, sizeof(hostName));
printf("%s",hostName);
if(NULL != (pHost = gethostbyname(hostName)))
{
memcpy(pLocalHostAddress, *pHost->h_addr_list, 4);
printf("ip address: %s\n",inet_ntoa(**(struct in_addr **)&pLocalHostAddress));
}
}
void main()
{
char pLocalHostAddress[50];
printhost((char *)pLocalHostAddress);
printf("ip address: %s\n",inet_ntoa(**(struct in_addr **)&pLocalHostAddress));
}
Как ни странно, он печатает IP-адрес хоста правильно, когда я пытаюсь напечатать внутри printhost()
функции, но дает ошибку сегментации при попытке печати из main()
функция. Может кто-нибудь прояснить?
'** (структура in_addr **) & pLocalHostAddress)' - то, что на земле –
я удалил C++ :) –
Массивы затухает естественно к указателям (первый элемент), то дон Не нужно бросать массив в указатель. –