我现在正在这样做,但是
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
inet_aton("10.12.110.57", &(my_addr.sin_addr));
memset(&(my_addr.sin_zero), '\0', 8);
我可以这样做吗?这是否也会将其余结构体归零?即
sin_zero[8]
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), 0};
// Or
struct sockaddr_in my_addr = {AF_INET, htons(MYPORT), {0} };
最佳答案
是的,这是正确的。当然,您可以只编写0
,而不是'\0'
冗长。您也可以用8
替换sizeof my_addr.sin_zero
,以确保设置了正确的字节数。
整理方法是:
struct sockaddr_in my_addr = { 0 };
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
如果您想对整个内容使用大括号括起来的初始化程序,则建议您使用指定的初始化程序以提高可读性。同样,这可能会或可能不会,因为在某些情况下,括号初始化程序必须是常量表达式,并且不清楚MYPORT是否为变量。