?? safe_string.cpp
字號:
#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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -