2012-06-06 15 views
7

Sto lavorando su alcuni difetti di analisi statica e uno che mi sta causando un problema è questo.C++ - Inizializzazione SOCKADDR_IN

SOCKADDR_IN m_stLclAddr; 

SOCKADDR_IN is a member of the WinSock API

Il difetto sta dicendo che non ho inizializzato il seguente:

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

Io non sono molto familiare familiarità con l'API WinSock, ma ho fatto un po 'di ricerca e voglio solo sapere se la seguente riga di codice sarebbe inizializzare m_stLclAddr con valori di default ?:

m_stLclAddr = { 0 }; 

risposta

4

m_stLclAddr = {0} imposterà tutto a zero la prima volta (non necessariamente i valori o che cosa si vuole realmente fare default). memset(&m_stLclAddr, 0, sizeof(SOCKADDR_IN)); imposterà tutto in m_stLclAddr a zero non solo per l'inizializzazione, ma anche per le chiamate successive.

Vorrei pensare che si vorrebbe fare qualcosa di simile:

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

come illustrato di seguito: http://msdn.microsoft.com/en-us/library/aa454002.aspx

+1

m_stLclAddr = {0} imposta il primo carattere a zero e poi il resto sarà zeri di auto, m_stLclAddr = {} imposterà tutto a zero. –

1

Sì, utilizzando {0} sarà intialize m_stLclAddr a tutti di azzerare