首页 > 解决方案 > 为什么我们在套接字编程c中使用memset将结构填充为0?

问题描述

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 很重要?

标签: csocketsstructmemset

解决方案


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

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

它与功能没有什么不同:

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

因为它可以打印任何值。


推荐阅读