关于inet_ntoa()的一些事情

ven*_*s.w 5 c unix linux

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

怎么了?

Pio*_*zmo 12

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

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

  • 如果使用未声明的函数,C编译器将假定它接受任何参数并返回int.这称为隐式声明.在使用它之前正确声明函数时,与显式声明相反. (2认同)