结构体、数组等初始化,ZeroMemory、memset

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SwordArcher/article/details/83417950

结构体、数组等初始化,ZeroMemory、memset


1.memset的初始化:

typedef struct s1
{
	SOCKET		m_Socket;
	SOCKADDR_IN m_ClientAddr;

	//初始化
	s1()
	{
		m_Socket = INVALID_SOCKET;
		//SOCKADDR_IN本身也是个结构体可以使用memset方法初始化
		memset(&m_ClientAddr, 0, sizeof(m_ClientAddr));
	}
};

struct Stu
{
	int nNum;
	bool bSex;
	char szName[20];
	char szEmail[100];

	//这样初始化也可以
	Stu()
	{
		memset(this, 0, sizeof(Stu));

		//或者下面的格式
		//memset(&nNum, 0, sizeof(Stu));
	}
};

2.ZeroMemory的初始化

typedef struct _PER_IO_CONTEXT
{
	OVERLAPPED		m_Overlapped;	//每一个重叠网络操作的重叠结构(针对每一个Socket的每一个操作,都要有一个)
	SOCKET			m_sockAccept;	//这个网络操作所使用的Socket
	WSABUF			m_wsaBuf;		//WSA类型的缓冲区,用于给重叠操作传参数
	char			m_szBuffer[MAX_BUFFER_LEN]; //WSABUF里具体存字符的缓冲区
	OPERATION_TYPE	m_OpType;		//标识网络操作的类型

	//初始化
	_PER_IO_CONTEXT()
	{
		ZeroMemory(&m_Overlapped, sizeof(m_Overlapped));
		ZeroMemory(m_szBuffer, MAX_BUFFER_LEN);
		m_sockAccept = INVALID_SOCKET;
		m_wsaBuf.buf = m_szBuffer;
		m_wsaBuf.len = MAX_BUFFER_LEN;
		m_OpType = NULL_POSTED;
	}

	//释放掉Socket
	~_PER_IO_CONTEXT()
	{
		if (m_sockAccept != INVALID_SOCKET)
		{
			closesocket(m_sockAccept);
			m_sockAccept = INVALID_SOCKET;
		}
	}

	//重置缓冲区内容
	void ResetBuffer()
	{
		ZeroMemory(m_szBuffer, MAX_BUFFER_LEN);
	}
}PER_IO_CONTEXT,*PPER_IO_CONTEXT;

猜你喜欢

转载自blog.csdn.net/SwordArcher/article/details/83417950