C字符串操作函数实现

//strcpy
char* mystrcpy(char * dst, const char *src)
{
	assert((dst != NULL) && (src != NULL));

	char *retAddr = dst;
	while((*(dst++) = *(src++)) != '\0');

	return retAddr;
}
//strncpy
char * mystrncpy(char *dst, char *src, size_t size)
{
	assert((dst != NULL) && (src != NULL));

	int i = 0;
	char *retAddr = dst;

	//while((*(dst++) = *(src++)) && ((++i) < size));//注意++i,不是i++
	while(((i++) < size) && (*(dst++) = *(src++)));//注意i++,不是++i

	return retAddr;
}
//strlen
int mystrlen(const char* str)
{
	assert(str!=NULL);

	int len = 0;

	while(*str != '\0')
	{
		str++;
		len++;
	}

	return len;
}
//strcat
char * mystrcat(char *dst, char *src)
{
	assert(src != NULL);

	char *retAddr = dst;

	while(*dst != '\0')
	{
		dst++;
	}
	while(*src != '\0')
	{
		*dst++ = *src++;
	}
	++dst = '\0';

	return retAddr;
}


 

//strchr
char * mystrchr(char *str, char c)
{
	assert(str != NULL);

	char* retAddr = str;
	
	while(*retAddr != '\0')
	{
		if (*retAddr == c)
		{
			return retAddr;
		}

		retAddr++;
	}
		
	return NULL;
}


 

//strcmp
int mystrcmp(char *str1, char *str2)
{
	assert((str1 != NULL) && (str2 != NULL));
	
	while((*str1 == *str2) && (*str1 != '\0') && (*str2 != '\0'))
	{
		str1++;
		str2++;
	}

	return *str1 - *str2;
}


 

//strncmp
int mystrncmp(char *str1, char *str2, size_t size)
{
	assert((str1!=NULL) && (str2!=NULL));

	while((*str1 == *str2) && (*str1 != '\0') && (*str2 != '\0'))
	{
		str1++;
		str2++;
	}

	return *str1 - *str2;
}


 

//strstr
char * mystrstr(char* dst, char* src)
{
	//条件判断特殊情况

	int idst = 0, isrc = 0, idstTemp = 0, isrcTemp = 0;

	while (dst[idst] != '\0')
	{
		idstTemp = idst;
		isrcTemp = 0;
		while (src[isrcTemp] == dst[idstTemp])
		{
			idstTemp++;
			isrcTemp++;
		}

		if (src[isrcTemp] == '\0')
		{
			return dst+idst;
		}

		idst++;
	}

	return dst;
}


 

//memset
void * mymemset(void *buffer, int ch, size_t size)
{
	assert(buffer != NULL);
	
	char *retAddr = (char*)buffer;

	while (size-- > 0)
	{
		*(retAddr++) = (char)ch;
	}
	return retAddr;
}


 



 

猜你喜欢

转载自blog.csdn.net/wklnewlife/article/details/8702765