C语言中的几个重要函数

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;
}

 

扫描二维码关注公众号,回复: 2747150 查看本文章

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;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/Alatebloomer/article/details/81450386