C ++ - 初始化SOCKADDR_IN

时间:2012-06-06 16:10:39

标签: c++ initialization winsock

我正在处理一些静态分析缺陷,导致我出现问题的是这一个。

SOCKADDR_IN m_stLclAddr;

SOCKADDR_IN is a member of the WinSock API

缺陷是说我没有初始化以下内容:

  • m_stLclAddr.sin_port
  • m_stLclAddr.sin_zero
  • m_stLclAddr.sin_addr
  • m_stLclAddr.sin_family

我对熟悉WinSock API并不是很熟悉,但我做了一些研究,我只是想知道以下代码行是否会使用默认值初始化m_stLclAddr?:

m_stLclAddr = { 0 };

2 个答案:

答案 0 :(得分:6)

m_stLclAddr = {0}会在第一次将所有内容设置为零(不一定是默认值或您实际想要做的事情)。 memset(&m_stLclAddr, 0, sizeof(SOCKADDR_IN));将m_stLclAddr中的所有内容设置为零,不仅用于初始化,还用于连续调用。

我认为你会想做这样的事情:

local_sin.sin_family = AF_INET;
local_sin.sin_port = htons (PORTNUM);
local_sin.sin_addr.s_addr = htonl (INADDR_ANY);

如下所示:http://msdn.microsoft.com/en-us/library/aa454002.aspx

答案 1 :(得分:1)

是的,使用{0}会将m_stLclAddr初始化为全零