c语言 - 字段s_addr的结构in_addr的默认值是多少?



我制作了一个小型客户端/服务器应用程序,但我想知道字段s_addr的默认值是否为INADDR_ANY,因为当我没有为套接字指定地址时,对于客户端和服务器,它的工作方式与结构中给定的此标志相同。我在文件上没有找到关于的任何信息

struct sockaddr_in {
short            sin_family;   
unsigned short   sin_port;     
struct in_addr   sin_addr;     
};
struct in_addr {
unsigned long s_addr;         
};

默认值为"未定义";,即结构的初始状态取决于它在RAM中所占字节的预先存在的状态(这反过来又取决于这些内存位置在程序执行的早期被用于什么)。显然,您不能依赖于这种行为,所以在对任何内容使用结构之前,您应该始终将字段设置为某个适当的已知值。

确保结构的所有字段都设置为全零的一种方便方法是:memset(&myStruct, 0, sizeof(myStruct));

除了Jeremy Friesner的答案外,您还可以使用

结构sockaddr_in addr={0};

一次性声明和初始化结构,这样您就不会忘记将其归零。我相信这在C99之后就有效了;在C23中,您还可以省略0;因此CCD_ 2也将工作。

但我最喜欢的方法是使用指定的初始化程序(自C99以来有效),如下所示:

struct sockaddr_in addr ={
.sin_family = AF_INET, 
.sin_addr.s_addr = htonl(INADDR_ANY),
.sin_port = htons(PORT)
};

未显式初始化的字段将为零。

什么是C中指定的初始值设定项?

最新更新