我使用函数char* inet_ntoa(struct in_addr in),
编写服务器当我包含标题时
<sys/socket.h>
和<netinet/in.h>
,可以使用编译器警告生成可执行二进制文件,但是当程序处理来自inet_ntoa
的返回字符串时会发生段错误。但是当我添加标题<arpa/inet.h>,
时,一切似乎都没问题。
什么事?
答案 0 :(得分:12)
arpa/inet.h
包含char* inet_ntoa(struct in_addr in)
的声明。如果您不包含此标头,则编译器将使用隐式声明int inet_ntoa()
。错误的声明很容易导致段错误,特别是如果您使用sizeof(int)!=sizeof(void*)
的系统。
如果您使用的是gcc
,则可以添加-Wall
标记。 gcc
会警告您在没有明确声明的情况下使用函数。