Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
1

Проблема с функцией gethostbyname

12.11.2018, 21:55. Просмотров 1352. Ответов 6
Метки нет (Все метки)

Здравствуйте. Написал простенькую программу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <winsock2.h>
#include <stdio.h>
int main()
{
    WSADATA wsadata;
 
    hostent *d;
     d = gethostbyname("google.com");
     printf(d->h_addr_list[0]);
 
    WSACleanup();
 
}
Программа компилируется, но крашится при запуске. Отлаживая, выяснил, что функция gethostbyname возвращает nullptr, который передается в printf и все ломается. Почему gethostbyname отрабатывает неправильно?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2018, 21:55
Ответы с готовыми решениями:

gethostbyname() возвращает 11004
struct sockaddr_in addr; struct hostent* hp; int retval; retval = WSAStartup(MAKEWORD(1, 1),...

Задание адреса gethostbyname
Здравствуйте дорогие форумчане! Извиняюсь если повторяю чью то тему, просто не заметил наверное....

Ручное освобождение памяти. gethostbyname, inet_ntoa
Hello World! gethostbyname Возвращает указатель на hostent, а inet_ntoa возвращает указатель на...

Проблема с функцией
Скажите как ее решить код ненадо хотябы строчку этой функции как будет выглядить

6
Модератор
3319 / 2106 / 337
Регистрация: 13.01.2012
Сообщений: 8,179
13.11.2018, 09:11 2
GreyCat, нет WSAStartup
0
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
13.11.2018, 13:55  [ТС] 3
Добавил. Теперь выводит следующее:
Код
*Вq…*Вq€*Вqѓ*ВqЋ*ВqЂ*Вq„*ВqЃ*Вq†*Вq‡*Вq‰*Вq‚google.com
Добавлено через 4 минуты
В следующий раз выдало следующее:
Код
J}ивJ}игJ}изJ}ииJ}идJ}ийJ}ибJ}ижJ}иаJ}иеJ}иоgoogle.com
По-моему строки не заканчиваются \0 и printf печатает весь стек
0
Модератор
3319 / 2106 / 337
Регистрация: 13.01.2012
Сообщений: 8,179
13.11.2018, 18:33 4
GreyCat, с чего вы взяли что там адрес в виде строки?
h_addr_list contains the binary IPv4 address
0
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
13.11.2018, 23:10  [ТС] 5
А в виде чего же?
0
13712 / 7335 / 1751
Регистрация: 30.01.2014
Сообщений: 12,306
16.11.2018, 13:39 6
Лучший ответ Сообщение было отмечено vxg как решение

Решение

Цитата Сообщение от GreyCat Посмотреть сообщение
А в виде чего же?
В виде указателей на двоичное представление каждого адреса. Даже из названия видно, что это список адресов, а не строка
C++
1
2
3
4
5
6
7
    in_addr addr;
    int i = 0;
    while(d->h_addr_list[i] != 0) 
    {
          memcpy(&addr.s_addr, d->h_addr_list[i++], sizeof(addr.s_addr));
          printf("\tIPv4 Address #%d: %s\n", i, inet_ntoa(addr));
    }
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
17.11.2018, 22:40  [ТС] 7
Спасибо, уже разобрался
Правильно вот так:
C++
1
printf(inet_ntoa(*(in_addr*)gethostbyname("google.com")->h_addr_list[0]));
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2018, 22:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблема с функцией pow()
last = c % pow(10, count); подчеркивает pow, пишет, что найдены перегрузки. last, c, count -...

Проблема с функцией обновления.
Дайте совет 'мне ЧАЙНИКУ' по РЕФРЕШУ. Вот в чём проблема??? Почему когда я заново запускаю -...

Проблема с функцией UPDATE
У меня такая проблема. Я хочу редактировать категории. сначала вывожу их, чтобы выбрали нужную...

Проблема с функцией пользователя.
Доброй ночи, форумчане. Помогите пожалуйста определить в чем ошибка: #include &lt;iostream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.