strcpy,strcmp,strcat,memcpy,memmov,memset,memcmpの実現


//  [11/10/2013 qingezha]     ,       ,    
char* strcpy_my(char * dest,char * src) //   src dest   
{
	if(!src||!dest)
		return NULL;
	char* stedest = dest;				//           
	while ((*dest++ = *src++)!='\0');	//             !!!!!!!!!!
	return stedest;						// src         dest 
}

strcpyは文字のみで、memcpyはメモリに対して、中にどんな内容が保存されているかにかかわらず、内蔵タイプとカスタムタイプをコピーすることができます.その他はstrcpyと同じように、上書きの問題を考慮しません.
//  [9/22/2013 qingezha]          ,   void     ++  
//	               ,memcpy     ,
//	 memmove        ,           。
void * my_memcpy(void *des, void *src, size_t count)
{
	if(des == NULL || src == NULL || count <= 0) 
		return NULL;
	char *dess = (char *)des;			//       
	char *srcs = (char *)src;
	char *ret = dess;
	int temp = count;
	while(count)
	{
		*dess++ = *srcs++;
		--count;
	}
	*(ret + temp) = '\0';
	return ret;
}
memmov移動時に上書き問題を考慮し、宛先アドレスとソースアドレスの相対位置に応じて、後から前へコピーするか、前から後へコピーするか
//  [9/24/2013 qingezha]       
void * my_memmov(void *dest, void *src, size_t n)
{
	{
		char*     d  = (char*) dest;
		const char*  s = (const char*) src;

		if (s>d)				//       ,    
		{
			while (n--)
				*d++ = *s++;
		}
		else if (s<d)			//       ,     
		{
			d = d+n-1;
			s = s+n-1;

			while (n--)
				*d-- = *s--;
		}
		return dest;

	}
}
memsetは、メモリ領域を1文字または他の文字に設定するために使用されます.
//  [11/10/2013 qingezha]
void* my_memset(char *ch,char c,size_t n)
{
	if(ch==NULL || n<=0)
		return ch;
	for (int i=0;i<n;i++)
	{
		ch[i]=c;
	}
	return ch;
}

memcmpメモリ内の対応する値のサイズを比較
int my_memcmp(const void *buf1,const void *buf2,size_t count)
{
	if (buf1==NULL||buf2==NULL||count<=0)
	{
		return 0;
	}
	while(count--&&*(char*)buf1==*(char*)buf2)
	{
		buf1=(char*)buf1+1;
		buf2=(char*)buf2+1;
	}
	return *(char*)buf1-*(char*)buf2;
}

strcat文字接続
//  [11/10/2013 qingezha]
char * my_strcat(char *des,const char *src)
{
	if (des==NULL||src==NULL)
	{
		return des;
	}
	char *ch = des;
	while(*ch)
		ch++;
	while(*ch++=*src++);
	return des;
}

strcmp文字列比較
//  [11/10/2013 qingezha]
int my_strcmp(const char *des,const char *src)
{
	int dis=0;
	while(!(dis=*des-*src)&&*des&&*src)//         
	{
		src++;
		des++;
	}
	if (dis>0)
	{
		dis = 1;
	} 
	else
	{
		dis = -1;
	}
	return dis;
}