2012-06-06 2 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 со значениями по умолчанию ?:

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

Да, с помощью {0} будет инициализировать m_stLclAddr всем нули

Смежные вопросы