nixp.ru v3.0

23 января 2017,
понедельник,
11:30:30 MSK

DevOps с компанией «Флант»
anonymous написал 5 ноября 2005 года в 09:27 (593 просмотра) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Есть такой фрагмент кода, компиляция которого вызывает варнинг:

incompatible type for argument 1 of `inet_ntoa'

Код:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(void)

{

struct iphdr *ip;

printf(«%-15s », inet_ntoa(ip->saddr));

return 0;

}

Фрагмент с 'printf' дает варнинг, в чем проблема и как ее решить?

Заранее благодарю!

decvar

в том что ip->saddr не char* ?

anonymous
decvar
в том что ip->saddr не char* ?

man inet_ntoa говорит, что аргумент функции типа struct in_addr in

decvar

ну и?

компилятор говорит, что это не char*. В доке написано что это не char*. Так что тебя удивляет?

anonymous
decvar
ну и?

компилятор говорит, что это не char*. В доке написано что это не char*. Так что тебя удивляет?

угу, понял. Как привести это выражение к правильному типу?

decvar

есть функция перевода бинарного адреса в строковое представление. Сам поищешь или у тебя паническая боязнь гугла?

anonymous
decvar
есть функция перевода бинарного адреса в строковое представление. Сам поищешь или у тебя паническая боязнь гугла?

этой функцией я и пользуюсь, см. первое сообщение.

rgo

пять минут чтения манов… вот результат

struct in_addr  addr;
addr.s_addr = ip->saddr;
printf ("%s", inet_ntoa (&addr));

или проще:

printf ("%s", inet_ntoa ((struct in_addr*)&ip->saddr));
anonymous
rgo
пять минут чтения манов… вот результат

struct in_addr  addr;
addr.s_addr = ip->saddr;
printf ("%s", inet_ntoa (&addr));

здесь в вызове inet_ntoa '&' лишний

или проще:

printf ("%s", inet_ntoa ((struct in_addr*)&ip->saddr));

а здесь не хватает указателя:

printf ("%s", inet_ntoa (*(struct in_addr*)&ip->saddr));
ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.