为什么我们在socket编程c中使用memset来填充值为0的结构?

Why we use memset to fill the structure with value 0, in socket programming c?

struct sockaddr_in servaddr, cliaddr; 

// Creating socket file descriptor 
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) { 
    perror("socket creation failed"); 
    exit(EXIT_FAILURE); 
} 

memset(&servaddr, 0, sizeof(servaddr)); 
memset(&cliaddr, 0, sizeof(cliaddr));

在我之前关于结构的工作中,我没有用值 0 填充结构,但是在套接字中,我们总是在使用它之前重置、填充 0 结构。为什么填充 0 结构很重要?

除非变量被声明为静态存储持续时间,否则它们在创建时将具有任意值。因此,在使用它们之前将它们设置为已知值总是一个好主意。

例如,如果您在 socket() 之后的下一步是 connect()bind(),他们将非常希望分别为客户端或服务器提供特定的结构值。

其实和函数没什么区别:

void xyzzy(void) {
    int plugh;
    printf("%d\n", plugh);
}

因为它可以打印 任何 值。

@paxdiablo 解释的延续 -

您可以使用初始值定义 structconst static 实例。

static const struct sockaddr_in EmptyStruct;

结构初始化程序可用于设置所需的初始值(可以是 memset 中的全 0)

然后每次你想重置结构时你可以通过

servaddr = EmptyStruct;
cliaddr = EmptyStruct;