📄 string.c
字号:
/*********************************************************************
*文 件 名:string.c
*描 述:字符串操作函数
* 该文件的代码来自uClinux\uClibc\libc\string.c
* 我只是调整风格,使它们符合自己的风格,尽管它们的风格很好!
*当前版本:V1.00
*作 者:
*创建日期:2012.01.20
**********************************************************************/
#include <lib\string.h>
/*********************************************************************
*函 数 名:strlen
*描 述:获得字符串长度
*输入参数:str:字符串首指针
*输出参数:无
*返 回 值:字符串长度
*注 意:
**********************************************************************/
unsigned int strlen(const char *str)
{
register char *ptr = (char *) str;
while (*ptr)
{
ptr++;
}
return (ptr - str);
}
/*********************************************************************
*函 数 名:strcat
*描 述:将src的字符串粘贴到dst字符串末尾
*输入参数:src:源字符串
*输出参数:dst:目的字符串
*返 回 值:dst
*注 意:
**********************************************************************/
char *strcat(char *dst, const char *src)
{
register char *ptr = dst;
while (*ptr)
{
ptr++;
}
while (*src)
{
*ptr++ = *src++;
}
*ptr = '\0';
return dst;
}
/*********************************************************************
*函 数 名:strcpy
*描 述:字符串拷贝,将src字符串拷贝到dst
*输入参数:src:源字符串
*输出参数:dst:目的字符串
*返 回 值:dst字符串首址
*注 意:
**********************************************************************/
char *strcpy(char *dst, const char *src)
{
register char *ptr = dst;
while (*src)
{
*dst++ = *src++;
}
*dst = '\0';
return ptr;
}
/*********************************************************************
*函 数 名:strcmp
*描 述:字符串比较
*输入参数:s1: 字符串1指针
* s2: 字符串2指针
*输出参数:无
*返 回 值:第一个不相同的字符数值差,若两个字符串相同返回0
*注 意:
**********************************************************************/
int strcmp(const char *s1, const char *s2)
{
unsigned register char c1, c2;
do
{
c1 = (unsigned char) *s1++;
c2 = (unsigned char) *s2++;
if (c1 == '\0')
{
return (c1 - c2);
}
}
while (c1 == c2);
return (c1 - c2);
}
/*********************************************************************
*函 数 名:memcpy
*描 述:内存拷贝
*输入参数:src:源地址
* len:拷贝内存字节数
*输出参数:dst: 目的地址
*返 回 值:目的内存首址dst
*注 意:
**********************************************************************/
void *memcpy(void *dst, const void *src, unsigned int len)
{
register char *a = dst;
register const char *b = src;
while (len--)
{
*a++ = *b++;
}
return dst;
}
/*********************************************************************
*函 数 名:memset
*描 述:将一块字符内存设置成指定的数值
*输入参数:c: 指定值
* len:内存长度
*输出参数:str:内存首址
*返 回 值:内存首址
*注 意:
**********************************************************************/
void *memset(void *str, int c, unsigned int len)
{
register char *a = str;
while (len--)
{
*a++ = c;
}
return str;
}
/*********************************************************************
*函 数 名:memmove
*描 述:内存块移动
*输入参数:src:源内存块
* len:内存块长度(字节)
*输出参数:dst: 目的内存
*返 回 值:目的内存首址dst
*注 意:
**********************************************************************/
void *memmove(void *dst, const void *src, unsigned int len)
{
register char *s1 = dst, *s2 = (char *) src;
/* This bit of sneakyness c/o Glibc, it assumes the test is unsigned */
if ((s1 - s2) >= len)
{
return memcpy(dst, src, len);
}
/* This reverse copy only used if we absolutly have to */
s1 += len;
s2 += len;
while (len-- > 0)
{
*(--s1) = *(--s2);
}
return dst;
}
/*********************************************************************
*函 数 名:memcmp
*描 述:内存块内容比较
*输入参数:s1: 内存块1首址
* s2: 内存块2首址
* len: 比较长度
*输出参数:无
*返 回 值:第一个不相同的字节单元数值差,
* 若两个内存块在len长度内相同返回0
*注 意:
**********************************************************************/
int memcmp(const void *s1, const void *s2, unsigned int len)
{
unsigned char *c1 = (unsigned char *)s1;
unsigned char *c2 = (unsigned char *)s2;
while (len--)
{
if (*c1 != *c2)
{
return (*c1 - *c2);
}
c1++;
c2++;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -