我现在正在这样做,但是

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是否为变量。

07-27 13:41