//将两个char类型连接:
char * __cdecl strcat(char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++;
while( *cp++ = *src++ ) ;
return( dst );
}
//C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间:
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ );
return( dst );
}
//查找字符串s中首次出现字符c的位置
char * __cdecl strchr(const char * string, int ch)
{
while (*string && *string != (char)ch)
string++;
if (*string == (char)ch)
return((char *)string);
return(NULL);
}
/*C/C++函数,比较两个字符串,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数. */
int __cdecl strcmp(const char * src,const char * dst)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
//求字符串长度
size_t __cdecl strnlen(const char *str, size_t maxsize)
{
size_t n;
for (n = 0; n < maxsize && *str; n++, str++) ;
return n;
}
//求字符串长度
size_t __cdecl strlen(const char * str)
{
const char *eos = str;
while( *eos++ ) ;
return( eos - str - 1 );
}
//拷贝安全函数
errno_t __cdecl strcpy_s(_CHAR *_DEST, size_t _SIZE, const _CHAR *_SRC)
{
_CHAR *p;
size_t available;
_VALIDATE_STRING(_DEST, _SIZE);
_VALIDATE_POINTER_RESET_STRING(_SRC, _DEST, _SIZE);
p = _DEST;
available = _SIZE;
while ((*p++ = *_SRC++) != 0 && --available > 0){}
if (available == 0)
{
_RESET_STRING(_DEST, _SIZE);
_RETURN_BUFFER_TOO_SMALL(_DEST, _SIZE);
}
_FILL_STRING(_DEST, _SIZE, _SIZE - available + 1);
_RETURN_NO_ERROR;
}
char * __cdecl strncpy(char * dest, const char * source, size_t count)
{
char *start = dest;
while (count && (*dest++ = *source++)) // copy str
count--;
if (count)
while (--count)
*dest++ = '\0';
return(start);
}
/*strstr(str1,str2)函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL. */
char * __cdecl strstr(const char * str1, const char * str2)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while (*s1 && *s2 && !(*s1-*s2)) s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
//strstr(str1,str2)函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中最后一次次出现的地址(也就是从右往左第一次出现的位置);否则,返回NULL.
char * __cdecl strrchr(const char * string, int ch)
{
char *start = (char *)string;
while (*string++) ; /* find end of string */
while (--string != start && *string != (char)ch) ;
if (*string == (char)ch) return( (char *)string );
return(NULL);
}