2012-06-06 121 views
7

我正在通過一些靜態分析缺陷工作,一個是導致我的問題是這一個。C++ - 初始化SOCKADDR_IN

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 = { 0 }; 

回答

4

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

m_stLclAddr = {0}設置的第一個字符零,然後剩下的將是零auto,m_stLclAddr = {}將全部設置爲零。 –

1

初始化m_stLclAddr是的,使用{0}將初始化m_stLclAddr到所有零的