memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现

为区别库函数,函数名首字母大写。


Memcmp函数:

//内存区域内容比较函数 
int  Memcmp(const void *buf1,const void *buf2,unsigned int count)
{
	unsigned int i=0;
	while(i


Memcpy函数:

//内存的拷贝函数
#ifdef size_t   //需要定义size_t类型
#undef size_t
#endif
#ifndef size_t
#define size_t unsigned int
#endif
extern void*  Memcpy(void *dest,const void * src,size_t n)
{
	unsigned int i=0;
	while(i

Memmove函数:

/*
memmove用于从src拷贝count个字符到dest,
如果目标区域和源区域有重叠的话,
memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
但复制后src内容会被更改。
但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
*/
//函数原型
#ifdef size_t   //需要定义size_t类型
#undef size_t
#endif
#ifndef size_t
#define size_t unsigned int
#endif
void *Memmove( void *dest, const void *src, size_t count )
{
	int i=0;
	if(src==dest)
	{
	}
	else if(((char*)src+count)>(char*)dest && (char*)src<(char*)dest)  // 如果冲突
	{
		//从尾部循环赋值
		i=count-1;
		while(i>=0)
		{
			((char*)dest)[i]=((char*)src)[i];
			i--;
		}
		
	}
	else
	{
		while(i


Memset函数:

//实现memset函数的功能
//内存区域初始化操作
//函数不能检查出指针越界情况  需要用户自行判断
#ifdef size_t   //需要定义size_t类型
#undef size_t
#endif

#ifndef size_t
#define size_t unsigned int
#endif
void * Memset(void *s,int ch,size_t n)
{
	int i=0;
	while(i

Strcat函数:

//连接函数
//函数并不负责检查str1是否有足够的容量去容纳,需要用户自行判断
char * Strcat(char* str1,char* str2)
{
	int n=0,p=0;
	//获取下标
	while(str1[n]!='\0')
	{
		n++;
	}
	while(str2[p]!='\0')
	{
		str1[n+p]=str2[p];
		p++;
	}
	str1[n+p]='\0';
	return str1;
}

Strcmp函数:

//比较函数
int Strcmp(const char* str1,const char* str2)  
{
	int i=0;
	while(str1[i]&&str2[i]&&(str1[i]==str2[i]))   //好方法  算法特别精简
	{
		i++;
	}
	return str1[i]-str2[i];

}

Strcpy函数:

//字符串拷贝函数
void Strcpy(char* str1,char* str2)
{
	int i=0;
	while(str2[i]!='\0')
	{
		str1[i]=str2[i];
		i++;
	}
	str1[i]='\0';
}

Strlen函数:

//实现库函数strlen()的功能
//函数同一首字母大写 ,以区分库函数
#include
#ifndef NULL
#define NULL ((void*)0)
#endif

unsigned int Strlen(const char * str)
{
	unsigned int length=0;
	assert(str!=NULL);
	while(str[length]!='\0')
	{
		length++;
	}
	return length;
}


/*---------------
递归的形式  但没有断言部分
unsigned int Strlen(const char * str)
{
	if(*str=='\0')
		return 0;
	return 1+Strlen(str+1);
}
*/











你可能感兴趣的:(C语言)