模拟实现C库函数:strncpy、strncat和strncmp

strncat函数是字符串链接函数,将* src字符串中n个字符连接到* dest字符串的有效字符的后面,最后还要加上’\0’

#define _CRT_SECURE_NO_WARNINGS 0
#include 
#include 
#include 

char *my_strncat(char *dest, const char *src,size_t num)
{
	assert(dest);
	assert(src);
	char *ret = dest;
	while (*dest != '\0') //先让dest的指针指向最后
	{
		*dest++;
	}
	while (num--)
	{
		*dest++ = *src++;
	}
	if (*(dest - 1) != '\0')  //判断是否已经将‘\0’复制到目标字符串中  
	{
		*dest = '\0';  //若没有则给目标字符串最后添加‘\0’   
	}
	return ret;
}
int main()
{
	char src[] = "world !";
	char dest[20] = "hello ";
	printf("%s\n", my_strncat(dest, src, 5));
	system("pause");
	return 0;
}

strncmp函数是字符串比较函数,若* str1的第一个字符的ASCII值大于* str2第一个字符的ASCII值,返回值大于0, 若* str1的第一个

字符的ASCII值小于*str2第一个字符的ASCII值,返回-1, 否则继续比较下一个字符,以此类推,直到遇到第n个字符为止

#define _CRT_SECURE_NO_WARNINGS 0
#include 
#include 
#include 
int my_strncmp(const char *str1, const char *str2, size_t num)
{
	assert(str1);
	assert(str2);
	while (num--)
	{
		if (*str1 == *str2)
		{
			str1++;
			str2++;
		}
		else if ((*str1 - *str2) > 0)
		{
			return 1;
		}
		else
		{
			return -1;
		}
	}
	return 0;
}
int main()
{
	char *str1 = "asdfga";
	char *str2 = "asdfgh";
	int ret = my_strncmp(str1, str2, 6);
	printf("%d\n", ret);
	system("pause");
	return 0;
}

strncpy是将一个字符串的n个字符复制到另一个字符串中,模拟实现strncpy是要注意到字符串的"\0",因为是复制n个字符所以不知道是否将"\0"复制到目标字符串中,所以要在程序中加上给目标字符串附上"\0"

#define _CRT_SECURE_NO_WARNINGS 0
#include 
#include 
#include 
char *my_strncpy( char *dest, const char *src, size_t num)
{
	assert(dest);
	assert(src);
	char *ret = dest;
	while (num--)
	{
		*dest++ = *src++;
	}
	if (*(dest - 1) != '\0')  //判断是否已经将‘\0’复制到目标字符串中  
	{	                                 
		*dest = '\0';  //若没有则给目标字符串最后添加‘\0’   
	}
	return ret;
}
int main()
{
	char *src = "1234adaq552";
	char dest[20];
	printf("%s\n", my_strncpy(dest, src, 5));
	system("pause");
	return 0;
}




你可能感兴趣的:(模拟实现C库函数:strncpy、strncat和strncmp)