strcmp函数:比较字符串
//C/C++函数,比较两个字符串,设这两个字符串为str1,str2,
//若str1==str2,则返回零;
//若str1<str2,则返回负数;
//若str1>str2,则返回正数。
int strcmp(const char* str1, const char* str2)
{
while(*str1 == *str2 && *str1 != '\0')
{
++str1;
++str2;
}
return *str1 - *str2;
}
strcpy函数:复制字符串
//strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
//strcpy 实现没有检查dst和src内存重叠问题
char* strcpy(char *dst, const char *src) //const约束,内容不可变
{
assert((src != NULL) && (dst != NULL)); //参数非0检验
char *pStr = dst; //保存dst
while ((*dst++ = *src++) != '\0') {}
return pStr; //返回dst,允许链式表达式
}
strlen:字符串长度
unsigned int Strlen(const char * str)
{
unsigned int length=0;
assert(str!=NULL);
while(str[length]!='\0')
{
length++;
}
return length;
}
strcat:拼接字符串
//dest 为目的字符串指针,src 为源字符串指针。
//strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;
//dest 最后的结束字符'\0'会被覆盖掉,并在连接后的字符串的尾部再增加一个'\0'。
//
//函数并不负责检查dst是否有足够的容量去容纳,需要用户自行判断
char* strcat(char* dst, const char* src)
{
char* ret = dst;
while(*dst != '\0')
++dst;
while((*dst++ = *src) != '\0');
return ret;
}
memcmp:内存字节比较函数
//把存储区 buffer1 和存储区 buffer2 的前 n 个字节进行比较
int memcmp(const void *buffer1,const void *buffer2,int count)
{
if (!count)
return(0);
while ( --count && *(char *)buffer1 == *(char *)buffer2)
{
buffer1 = (char *)buffer1 + 1;
buffer2 = (char *)buffer2 + 1;
}
return( *((unsigned char *)buffer1) - *((unsigned char *)buffer2) );
}
memcpy:内存拷贝函数
//memcpy函数的功能是从源src所指的内存地址的起始位置
//开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
void* my_memcpy(void* dst, const void* src, size_t n)
{
char *tmp = (char*)dst;
char *s_src = (char*)src;
while(n--) {
*tmp++ = *s_src++;
}
return dst;
}
memmove:内存拷贝,考虑内存重叠的情况
void* memmove(void* dst, const void* src, size_t n)
{
char* s_dst;
char* s_src;
s_dst = (char*)dst;
s_src = (char*)src;
if(s_dst>s_src && (s_src+n>s_dst)) {
s_dst = s_dst+n-1;
s_src = s_src+n-1;
while(n--) {
*s_dst-- = *s_src--;
}
}else {
while(n--) {
*s_dst++ = *s_src++;
}
}
return dst;
}
memset:设置内存内容
//实现memset函数的功能
//内存区域初始化操作
//函数不能检查出指针越界情况 需要用户自行判断
void * memset(void *s,int ch,size_t n)
{
int i=0;
while(i<n)
{
*((char*)s+i)=ch; //ch代表ascii码的整数值
i++;
}
return s;
}