9

我正在解决一些静态分析缺陷,而导致我出现问题的缺陷就是这个。

SOCKADDR_IN m_stLclAddr;

SOCKADDR_IN 是 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 };
4

2 回答 2

7

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

于 2012-06-06T16:21:24.830 回答
2

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

于 2012-06-06T16:17:05.470 回答