字符串拷贝宏
用于string向char的转换。
定义
#define USSE_NORMAL_LEN (64)
#define EFFmin(a, b) (((a) < (b)) ? (a) : (b))
string To char
#define SAFE_COPY(x,y) \
if((x) != NULL && (y)!=NULL)\
{\
memset(x,0,sizeof(x));\
strncpy(x,y,EFFmin((sizeof(x) -1), strlen(y)));\
}
wstring To wchat_t
#define SAFE_COPY_W(x,y) \
if((x) != NULL && (y)!=NULL)\
{\
memset(x,0,sizeof(x));\
wcsncpy(x,y,EFFmin((sizeof(x) -1)/sizeof(wchar_t), wcslen(y)));\
}
例:
MFC:
CString strValue;
char szValue;
wchar_t szWValue;
SAFE_COPY(szValue, CW2A(strValue.GetString()));
SAFE_COPY_W(szWValue, strValue.GetString());
C++:
wstring strValue;
char szValue;
wchar_t szWValue;
SAFE_COPY(szValue, CW2A(strValue.c_str()));
SAFE_COPY_W(szWValue, strValue.c_str());
字符串通配符判断
使用*和?这些通配符来代替一些字符我们要判断通配符。
/*************************** Function ***********************************
* 函 数 名:wildcmp
* 函数功能:通配符判断
* 参数说明:接受2个字符串
* 返 回 值:相同返回TRUE,否则FALSE
**********************************************************************/
CHAR版本
int wildcmp(const char *wild, const char *string)
{
const char *cp = NULL, *mp = NULL;
while ((*string) && (*wild != '*'))
{
if ((*wild != *string) && (*wild != '?'))
{
return 0;
}
wild++;
string++;
}
while (*string)
{
if (*wild == '*')
{
if (!*++wild)
{
return 1;
}
mp = wild;
cp = string+1;
}
else if ((*wild == *string) || (*wild == '?'))
{
wild++;
string++;
}
else
{
wild = mp;
string = cp++;
}
}
while (*wild == '*')
{
wild++;
}
return !*wild;
}
WCHAR版本
int wildcmpW(const WCHAR *wild, const WCHAR *string)
{
const WCHAR *cp = NULL, *mp = NULL;
while ((*string) && (*wild != L'*'))
{
if ((*wild != *string) && (*wild != L'?'))
{
return 0;
}
wild++;
string++;
}
while (*string)
{
if (*wild == L'*')
{
if (!*++wild)
{
return 1;
}
mp = wild;
cp = string+1;
}
else if ((*wild == *string) || (*wild == L'?'))
{
wild++;
string++;
}
else
{
wild = mp;
string = cp++;
}
}
while (*wild == L'*')
{
wild++;
}
return !*wild;
}