2012-06-06 1 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

나는 윈속 API에 익숙 익숙하지 않다 그러나 나는 약간의 연구를 수행하고 난 바로 다음 코드 줄은 기본 값?

m_stLclAddr = { 0 }; 

답변

4

m_stLclAddr = {0}은 모든 것을 처음으로 0으로 설정합니다 (기본값 또는 실제로하고 싶은 것은 아님). memset(&m_stLclAddr, 0, sizeof(SOCKADDR_IN));은 초기화뿐만 아니라 연속 호출에서도 m_stLclAddr의 모든 값을 0으로 설정합니다. 다음과 같이

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 = {}는 모두 0으로 설정합니다. –

1

와 m_stLclAddr를 초기화 할 것인지 알고 싶어 예, {0}을 사용하면 m_stLclAddr을 모두 0으로 초기화합니다.