C++ - инициализация SOCKADDR в

Я работаю через некоторые дефекты статического анализа, и один из них вызывает у меня проблему.

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 };

2 ответов


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


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