Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我使用该函数编写服务器char* inet_ntoa(struct in_addr in),当我包含头 文件<sys/socket.h>时<netinet/in.h>,可以生成带有编译器警告的可执行二进制文件,但是当程序处理来自的返回字符串时会发生段错误inet_ntoa。但是当我添加标题时,<arpa/inet.h>,一切似乎都很好。
char* inet_ntoa(struct in_addr in),
<sys/socket.h>
<netinet/in.h>
inet_ntoa
<arpa/inet.h>,
怎么了?
arpa/inet.h包含 的声明char* inet_ntoa(struct in_addr in)。如果您不包含此标头,您的编译器将使用隐式声明int inet_ntoa()。错误的声明很容易导致段错误,特别是如果你在系统 where sizeof(int)!=sizeof(void*).
arpa/inet.h
char* inet_ntoa(struct in_addr in)
int inet_ntoa()
sizeof(int)!=sizeof(void*)
如果您正在使用gcc,您可以添加-Wall标志。gcc将警告您使用没有明确声明的函数。
gcc
-Wall