关于inet_ntoa()的一些事情

时间:2012-06-15 11:18:35

标签: c linux unix

我使用函数char* inet_ntoa(struct in_addr in),编写服务器当我包含标题时 <sys/socket.h><netinet/in.h>,可以使用编译器警告生成可执行二进制文件,但是当程序处理来自inet_ntoa的返回字符串时会发生段错误。但是当我添加标题<arpa/inet.h>,时,一切似乎都没问题。

什么事?

1 个答案:

答案 0 :(得分:12)

arpa/inet.h包含char* inet_ntoa(struct in_addr in)的声明。如果您不包含此标头,则编译器将使用隐式声明int inet_ntoa()。错误的声明很容易导致段错误,特别是如果您使用sizeof(int)!=sizeof(void*)的系统。

如果您使用的是gcc,则可以添加-Wall标记。 gcc会警告您在没有明确声明的情况下使用函数。