0
点赞
收藏
分享

微信扫一扫

自定义函数模拟实现库函数strncpy、strncat和strncmp的功能

phpworkerman 2022-04-02 阅读 182


目录

一、限制长度的字符串拷贝函数

strncpy

二、限制长度的字符串追加函数

strncat

 三、限制长度的字符串比较函数

 strncmp


一、限制长度的字符串拷贝函数

strncpy


自定义函数模拟实现库函数strncpy的功能: 

#include<stdio.h>
#include<assert.h>
char* my_strncpy(char* dest, const char* src, size_t num)
{
	int n = 0;
	char* p = dest;
	assert(dest && src);//断言函数,防止传递空指针
	while (*src != '\0')
	{
		*dest++ = *src++;
		n++;
		if (n == num)//已经拷贝字符的个数等于限制的个数,跳出循环
		{
			break;
		}
	}
	if (*src == '\0')//判断是否将src指向的字符串里的所有内容拷贝过去
		*dest = *src;
	if (*src != '\0')
		*dest = '\0';
	return p;
}
int main()
{
	char arr[] = "*****************";
	char* p = "abcdefg";
	int num = 0;
	printf("需要拷贝的字符个数:");
	scanf("%d", &num);
	fprintf(stdout, "拷贝后的字符串:%s", my_strncpy(arr, p, num));
	return 0;
}


二、限制长度的字符串追加函数

strncat


 自定义函数模拟实现库函数strncat的功能: 

#include<stdio.h>
char* my_strncat(char* dest, const char* src, size_t num)
{
	int n = 0;
	char* p = dest;
	while (*dest != '\0')//先找到目标空间里的 '\0'
	{
		dest++;
	}
	while (*src != '\0')
	{
		*dest++ = *src++;
		n++;
		if (n == num)//已经追加的字符的个数等于限制的个数,跳出循环
			break;
	}
	if (*src == '\0')//判断是否将src指向的字符串里的所有内容追加过去
		*dest = *src;
	if (*src != '\0')
		*dest = '\0';
	return p;
}
int main()
{
	char arr[20] = "abcdefg";
	char* p = "hijklm";
	int num = 0;
	printf("需要追加的字符个数:");
	scanf("%d", &num);
	char* ret = my_strncat(arr, p, num);
	fprintf(stdout, "追加后的字符串:%s", ret);
	return 0;
}


 三、限制长度的字符串比较函数

 strncmp


 自定义函数模拟实现库函数strncmp的功能: 

#include<stdio.h>
int my_strncmp(const char* str1, const char* str2, size_t num)
{
	int n = 1;
	while (*str1 == *str2)
	{
		if (*str1 == 0||n == num)//1、当全部字符比较完或2、比较的字符个数等于限制的个数
		{
			return 0;
		}
		str1++;
		str2++;
		n++;
	}
	if (*str1 > *str2)
	{
		return 1;
	}
	else
	{
		return -1;
	}

}
int main()
{
	char* p1 = "abcdef";
	char arr[] = "abcdfhj";
	int num = 0;
	printf("需要比较的字符个数:");
	fscanf(stdin,"%d", &num);
	int ret = my_strncmp(p1, arr,num);
	if (ret > 0)
	{
		printf("p1>arr");
	}
	else if (ret < 0)
	{
		printf("p1<arr");
	}
	else
	{
		printf("p1=arr");
	}
	return 0;
}

举报

相关推荐

0 条评论