Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > printf() и любая функция с переменным


Автор: Rickert 7.3.2007, 10:17
Alt Linux
Код:
Код

...
struct sockaddr_in tmpAddr, tmpAddr2;
...
printf("%s --> %s\n", inet_ntoa(tmpAddr.sin_addr), inet_ntoa(tmpAddr2.sin_addr));
...

Если tmpAddr.sin_addr имеет значение '172.172.182.111', а tmpAddr2.sin_addr = "189.88.122.98"то на экране будет:
Цитата
172.172.182.111 --> 172.172.182.111

При этом, если ниже вставить код:
Код

...
struct sockaddr_in tmpAddr, tmpAddr2;
...
printf("%s --> %s\n", inet_ntoa(tmpAddr.sin_addr), inet_ntoa(tmpAddr2.sin_addr));
printf("%s --> ", inet_ntoa(tmpAddr.sin_addr));
printf("%s\n", inet_ntoa(tmpAddr2.sin_addr));
...

То на экране будет:
Цитата
172.172.182.111 --> 172.172.182.111
172.172.182.111 --> 189.88.122.98

И теперь, если поменять местами в первом "printf()" аргументы:
Код

...
struct sockaddr_in tmpAddr, tmpAddr2;
...
printf("%s --> %s\n", inet_ntoa(tmpAddr2.sin_addr), inet_ntoa(tmpAddr.sin_addr));
printf("%s --> ", inet_ntoa(tmpAddr.sin_addr));
printf("%s\n", inet_ntoa(tmpAddr2.sin_addr));
...

То на экране увидим:
Цитата
189.88.122.98 --> 189.88.122.98
172.172.182.111 --> 189.88.122.98

С чем это связано? Пробовал писать свою функцию по выводу строки с переменным числом аргументов - результат тот же.

Автор: MAKCim 7.3.2007, 11:33
Rickert, 
читай внимательно man по inet_ntoa()
Цитата

...
The string is returned in a statically allocated buffer, which subsequent calls will overwrite
...

Автор: Rickert 7.3.2007, 11:57
Дело в том, что у меня вообще на запрос типа "man inet_ntoa" ничего не выдаётся.
Значит дело в самой функции.
Благодарю!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)