6

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

怎么了?

4

1 回答 1

12

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

如果您正在使用gcc,您可以添加-Wall标志。gcc将警告您使用没有明确声明的函数。

于 2012-06-15T11:30:32.483 回答