簡體   English   中英

為什么在套接字編程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的解釋中-

您可以定義const static的實例struct與初始值。

static const struct sockaddr_in EmptyStruct;

可以使用結構初始化程序設置所需的初始值(如memset可以為全0)

然后,每次您要重置結構時,都可以通過

servaddr = EmptyStruct;
cliaddr = EmptyStruct;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM