目录
  • 一、strcpy
  • 二、模拟实现strcat
  • 三、strcmp
  • 总结:

一、strcpy

//模拟实现strcpy
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char*dest, char*str)
{
	assert(dest && str);
	char* tmp = dest;
	while (*str != '\0')
	{
		*dest = *str;
		dest++;
		str++;
	}
	*dest = '\0';
	return tmp;
}
int main()
{
	char arr1[20] = "xxxxxxxxxxxxxxx";
	char arr2[] = "study hard!";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

C语言三个函数的模拟实现详解

二、模拟实现strcat

思路:先找到目标字符串的\0位置,然后停下

用两个指针扫描目标字符串和源字符串,并赋值

在源字符串添加完成后,加上’\0‘

//模拟实现strcat
//字符串追加
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* str)
{
	assert(dest && str);
	char* tmp = dest;
	//找到目标的尾巴
	while (*dest != '\0')
	{
		dest++;
	}
	//链接字符串
	while (*dest++ = *str++)
	{
		;
	}
	*dest = '\0';
	return tmp;
}
int main()
{
	char arr1[20] = "hello";
	char arr2[] = " world!";
	my_strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

C语言三个函数的模拟实现详解

三、strcmp

要注意,strcmp不是比较两字符串的长度,而是逐位比较字符的ASCII码值

//模拟实现strcmp 返回的不是1 -1,而是正数,负数
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1&&str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcder";
	int ret=my_strcmp(arr1, arr2);
	if (ret < 0)
	{
		printf("<\n");
	}
	else if (ret == 0)
	{
		printf("=\n");
	}
	else
	{
		printf(">\n");
	}
	return 0;
}

C语言三个函数的模拟实现详解

总结:

多多实现库函数的模拟可以更好地认识指针。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!     

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。