[英]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.