safe_string.cpp

来自「奇迹世界公用文件源代码,研究网络游戏的朋友可以研究下」· C++ 代码 · 共 294 行

CPP
294
字号
#include "UtilityCommon.h"

namespace util
{
//////////////////////////////////////////////////////////////////////////

	

//void * SafeNCopy(char * pszDest, const char * pszSource, size_t Size )
//{
//#ifdef _DEBUG
//	if (IsBadWritePtr((VOID *)pszDest, Size) || IsBadReadPtr(pszDest, Size) || 
//		IsBadWritePtr((VOID *)pszSource, Size) || IsBadReadPtr(pszSource, Size))
//	{
//		_asm int 3;
//	}
//#endif 
//
//	memset(pszDest, 0, Size);
//	memcpy(pszDest, pszSource, Size);
//
//	return pszDest;
//}

char * SafeNCopy(char * pszDest, const char * pszSource, size_t Size)
{
#ifdef _DEBUG
	if (IsBadWritePtr((VOID *)pszDest, Size) || IsBadReadPtr(pszDest, Size) )
	{
		_asm int 3;
	}
#endif 

	memset(pszDest, 0, Size);		// 捞 何盒俊 措秦辑 歹 瘤难焊磊.
	strncpy( pszDest, pszSource, Size );

	return pszDest;
}

wchar_t * SafeNCopy(wchar_t * pszDest, const wchar_t * pszSource, size_t Size)
{
#ifdef _DEBUG
	if (IsBadWritePtr((VOID *)pszDest, Size) || IsBadReadPtr(pszDest, Size) )
	{
		_asm int 3;
	}
#endif 

	memset(pszDest, 0, Size);		// 捞 何盒俊 措秦辑 歹 瘤难焊磊.
	wcsncpy( pszDest, pszSource, Size );

	return pszDest;
}



//
// 秦寇 滚傈俊档 惑包绝霸 CompareString栏肺 官操磊.
//
char * GetToken(char * pszString, char * OUT pszGetToken, char * pszTokenEnd)
{
	int iLen = strlen(pszString);
	int iTokenLen = strlen(pszTokenEnd);

	if (iLen <= 0)
	{
		return NULL;
	}

	if (iLen < iTokenLen)
	{
		return NULL;
	}

	pszGetToken[0] = NULL;

	//int iCurLen = 0;
	char * pszPos1 = NULL;
	if ( CSTR_EQUAL == CompareStringA(
		LOCALE_USER_DEFAULT, 
		0, 
		pszString, 
		iTokenLen, 
		pszTokenEnd, 
		iTokenLen) )
	{
		pszPos1 = &pszString[iTokenLen];
	}
	else
	{
		pszPos1 = pszString;
	}

	static char util_szToken[512] = {0,};

	memset(util_szToken, 0, strlen(util_szToken) * sizeof(char));

	for (int i = 0; i < iLen; i++)
	{
		if (i != 0 && 
			( 0 == strncmp(pszPos1, pszTokenEnd, iTokenLen ) || 
			*pszPos1 == NULL))
		{
			SafeNCopy( pszGetToken, util_szToken, i+1);

			return pszPos1;
		}

		util_szToken[i] = (*pszPos1);
		pszPos1++;
	}

	// ?
	return NULL;
}


//
// 秦寇 滚傈俊档 惑包绝霸 CompareString栏肺 官操磊.
//
wchar_t * GetToken(wchar_t * pszString, wchar_t * OUT pszGetToken, wchar_t * pszTokenEnd)
{
	int iLen = wcslen(pszString);
	int iTokenLen = wcslen(pszTokenEnd);

	if (iLen <= 0)
	{
		return NULL;
	}

	if (iLen < iTokenLen)
	{
		return NULL;
	}

	pszGetToken[0] = NULL;

	//int iCurLen = 0;
	wchar_t * pszPos1 = NULL;
	if ( CSTR_EQUAL == CompareStringW(
			LOCALE_USER_DEFAULT, 
			0, 
			pszString, 
			iTokenLen, 
			pszTokenEnd, 
			iTokenLen) )
	{
		pszPos1 = &pszString[iTokenLen];
	}
	else
	{
		pszPos1 = pszString;
	}

	static wchar_t util_szToken[512] = {0,};

	memset(util_szToken, 0, wcslen(util_szToken) * sizeof(wchar_t));

	for (int i = 0; i < iLen; i++)
	{
		if (i != 0 && 
			( 0 == wcsncmp(pszPos1, pszTokenEnd, iTokenLen ) || 
			*pszPos1 == NULL))
		{
			SafeNCopy( pszGetToken, util_szToken, i+1);

			return pszPos1;
		}

		util_szToken[i] = (*pszPos1);
		pszPos1++;
	}

	// ?
	return NULL;
}

//////////////////////////////////////////////////////////////////////////
}

//void * _strncpy(char * pszDest, const char * pszSource, size_t Size )
//{
//	return util::SafeNCopy(pszDest, pszSource, Size);
//}

//----------------------------------------------------------------------------
/**
*/
char * 
_strncpy(char * pszDest, const char * pszSource, size_t Size )
{
	return util::SafeNCopy(pszDest, pszSource, Size);
}

//----------------------------------------------------------------------------
/**
*/
wchar_t * 
_strncpy(wchar_t * pszDest, const wchar_t * pszSource, size_t Size )
{
	return util::SafeNCopy(pszDest, pszSource, Size);
}

//----------------------------------------------------------------------------
/**
*/
BOOL
_Strncmp(char * pszComp1, int iLen1, char * pszComp2, int iLen2 )
{
	if ( CSTR_EQUAL == CompareStringA(
			LOCALE_USER_DEFAULT,
			NULL, 
			pszComp1,
			iLen1, 
			pszComp2,
			iLen2) )
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
};


//----------------------------------------------------------------------------
/**
*/
BOOL
_Strncmp(wchar_t * pszComp1, int iLen1, wchar_t * pszComp2, int iLen2 )
{
	if ( CSTR_EQUAL == CompareStringW(
		LOCALE_USER_DEFAULT,
		NULL, 
		pszComp1,
		iLen1, 
		pszComp2,
		iLen2) )
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
};


//----------------------------------------------------------------------------
/**
*/
BOOL	
_Strincmp(char * pszComp1, int iLen1, char * pszComp2, int iLen2 )
{
	if ( CSTR_EQUAL == CompareStringA(
			LOCALE_USER_DEFAULT,
			NORM_IGNORECASE, 
			pszComp1,
			iLen1, 
			pszComp2,
			iLen2) )
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
};

//----------------------------------------------------------------------------
/**
*/
BOOL	
_Strincmp(wchar_t * pszComp1, int iLen1, wchar_t * pszComp2, int iLen2 )
{
	if ( CSTR_EQUAL == CompareStringW(
		LOCALE_USER_DEFAULT,
		NORM_IGNORECASE, 
		pszComp1,
		iLen1, 
		pszComp2,
		iLen2) )
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?