模拟实现strncpy、strncat、 strncmp

1.模拟实现strncpy

char* strncpy(char* destination,const char* source,size_t num);
拷贝num个字符从源字符到目标空间,如果源字符串的长度小于num,则考完源字符串之后,在目标的后边追加0,直到num个。

#include<stdio.h>
#include<assert.h>
char * my_strncpy(char * dest, const char * src, size_t num)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (num)
	{
		*dest++ = *src++;
		num--;
	}
	if ((*dest - 1) != 0)
	{
		*dest = '\0';
	}
	return ret;
}
int main()
{
	char *p = "bcd";
	char q[5];
	printf("%s\n", my_strncpy(q, p, 2));
	system("pause");
	return 0;
}
2.模拟实现strncat
char* strncat(char* destination,const char* source,size_t num);

把源字符串的num个字符拼接到目标字符串,在拼接字符串的时候,它会默认给你加上’\0’。

#include<stdio.h>
#include<assert.h>
char * my_strncat(char * dest, const char * src, size_t num)
{
	assert(dest != NULL);
	assert(src != NULL);
	char * ret= dest;
	while (*dest)
	{
		dest++;
	}
	while (num)
	{
		*dest++ = *src++;
		num--;
	}
	if ((*dest - 1) != 0)
	{
		*dest = '\0';
	}
	return ret;
}
int main()
{
	char *p = "bcd";
	char q[20] = {"12345"};
	printf("%s\n", my_strncat(q, p, 3));
	system("pause");
	return 0;
}

3.模拟实现strncmp
int strncmp(const char * str1,const char * str2,size_t num);

  比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

int my_strncmp(char * str1, const char * str2, size_t num)
{
	assert(str1 != NULL);
	assert(str2 != NULL);

	while (*str1 && *str2&&num--)
	{
		if (str1 == str2)
		{
			str1++;
			str2++;
		}
		else
			break;
	}
	//return *str1-*str2;  
	if (*str1 == *str2)
	{
		return 0;
	}
	if (*str1 > *str2)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}
int main()
{
	char * p = "nihao";
	char * q = "niha";
	int ret = my_strncmp(p, q, 3);
	printf("%d ", ret);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41268108/article/details/80509093
今日推荐