简单的 strncmp,strncpy , strncat 模拟实现

本文详细介绍了如何用C语言模拟实现strncmp、strncpy和strncat函数,包括它们的工作原理、输入要求以及示例代码,帮助读者理解这些字符串处理函数的基本操作。
摘要由CSDN通过智能技术生成

目录

strncmp模拟实现

strncpy模拟实现

strncat 模拟实现


strncmp模拟实现

第⼀个字符串⼤于第⼆个字符串,则返回于0的数字
◦ 第⼀个字符串等于第⼆个字符串,则返回0
◦ 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

int my_strcmp(const char* arr1, const char* arr2)
{
	assert(arr1 && arr2);

	while (*arr1 == *arr2)// 让两个字符比较
	{
		if (*arr1 == '\0' && *arr2 == '\0')//如果两个数组全部相同,就返回0
		{
			return 0;
		}
        //比较完一个字符就下一对
		arr1++;
		arr2++;
	}
    //直接返回两个字符的差
	return *arr1 - *arr2;
}

int main()
{
	char arr1[] = "abcd";
	char arr2[] = "abce";
	int ret = my_strcmp(arr1, arr2);
	printf("%d", ret);
	return 0;
}

strncpy模拟实现

源字符串必须以 '\0' 结束
1.会将源字符串中的 '\0' 拷⻉到⽬标空间。
2.⽬标空间必须⾜够⼤,以确保能存放源字符串。
3.⽬标空间必须可修改
 

char* my_strncpy(char* dest, const char* sourse, size_t n)
{
	int i = 0;
	char* ret = dest;//保留一份首地址
	for (i = 0; i < n; i++)//把arr1的内容放在arr2
	{
		dest[i] = sourse[i];
	}
	dest[n] = '\0';//自己加上‘\0’,防止读取时越界,不过原本编译器的strncpy不会加‘\0’
	return ret;
}

int main()
{
	char arr1[] = "abcdef";
	char arr2[20];
	char* ret = my_strncpy(arr2, arr1, 5);//arr2是目标数组,可以修改,足够大
	printf("%s ", ret);
	return 0;
}

strncat 模拟实现

• 源字符串必须以 '\0' 结束。
⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容
 

char* my_strncat(char* dest, const char* sourse, size_t n)
{
	char* p = dest;//用来保存dest的首地址
	while (*dest)dest++;//遇到‘\0’停下来

	for (int i = 0; i < n; i++)//再‘\0’处加字符
	{
		*dest = *sourse;
		p++;
		sourse++;
	}

	return p;
}

int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";

	my_strncat(arr1, arr2, 5);
	printf("%s ", arr1);
	return 0;
}

点点赞吧,求求各位大佬了,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值