2012-06-06 39 views
7

Tôi đang làm việc thông qua một số lỗi Phân tích tĩnh và một nguyên nhân gây ra cho tôi sự cố là vấn đề này.C++ - Khởi tạo SOCKADDR_IN

SOCKADDR_IN m_stLclAddr; 

SOCKADDR_IN is a member of the WinSock API

Khiếm khuyết đang nói rằng tôi đã không được khởi tạo như sau:

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

Tôi không phải rất quen thuộc quen thuộc với các API WinSock nhưng tôi đã làm một chút về nghiên cứu và tôi chỉ muốn biết nếu dòng mã sau đây sẽ khởi m_stLclAddr với các giá trị mặc định ?:

m_stLclAddr = { 0 }; 

Trả lời

4

m_stLclAddr = {0} sẽ đặt mọi thứ thành 0 lần đầu tiên (không nhất thiết là giá trị mặc định hoặc những gì bạn thực sự muốn làm). memset(&m_stLclAddr, 0, sizeof(SOCKADDR_IN)); sẽ đặt mọi thứ trong m_stLclAddr thành 0 cho không chỉ khởi tạo, mà còn gọi liên tiếp.

tôi sẽ nghĩ rằng bạn sẽ muốn làm một cái gì đó như thế này:

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

như ở đây: http://msdn.microsoft.com/en-us/library/aa454002.aspx

+1

m_stLclAddr = {0} đặt char đầu tiên về không và sau đó phần còn lại sẽ là số không bởi auto, m_stLclAddr = {} sẽ đặt tất cả về 0. –

1

Có, sử dụng {0} sẽ intialize m_stLclAddr cho tất cả các số không