C语言保姆级喂饭——库函数的模拟实现

目录

1.模拟实现strlen​

函数介绍

代码实现:

 2.模拟实现strcpy​

函数介绍:

代码实现 

3.模拟实现strcmp​

函数介绍:

 代码实现

4.模拟实现strcat​

 函数介绍

 代码实现

 5.模拟实现strstr

代码实现:


友友们 我是你们的小王同学 

今天带给大家 一篇保姆级的库函数的模拟实现

如果写的对大家有帮助的话 请关注我的主页:你们的三连是我最大的动力
(doge)学好c语言的小王同学的博客_CSDN博客-领域博主

还可以关注小王的gitee  比特王信哲 (bitewang) - Gitee.com

 

1.模拟实现strlen

函数介绍

  • 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包括('\0')
  • 参数指向的字符串必须以‘/0’结束。
  • 注意函数的返回值为size_t,是无符号
  • 学会strlen函数得模拟

代码实现:

 2.模拟实现strcpy

函数介绍:

  • 源字符必须以'\0'结束
  • 会将源字符串中的'\0'拷贝到目标空间
  • 目标空间必须足够大,以确保能存放源字符串
  • 目标空间必须可变

 很多小伙伴在实现strcpy的时候有没有我这种情况

其实这里打印不出来的原因就是 找不到arr2里的'\0'所以一直在找导致编译器都崩了(doge

代码实现 

3.模拟实现strcmp

函数介绍:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字
  • 注意!strcmp比较的不是字符串的长度而是!!!比较字符串中对应位置上的字符的大小,如果相同,那就比较下一对儿,直到不同或者遇到'\0';

 代码实现

int my_strcmp(const char*s1,const char*s2) {
	assert(s1 && s2);
	while (*s1 == *s2) {
		if (*s1 == '\0') {
			return 0;//相等
		}
		s1++;
		s2++;

	}
	if (*s1 > *s2) {
		return 1;
	}
	else {
		return -1;
	}

}
int main() {
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";
	int ret = strcmp(arr1, arr2);
	if (ret > 0) {
		printf(">\n");

	}
	else if (ret == 0) {
		printf("==\n");
	}
	else {
		printf("<\n");
	}
	printf("%d\n", ret);
}

4.模拟实现strcat

 函数介绍

  • 源字符必须以'\0'结束
  • 目标空间必须足够大,能容纳下源字符串的内容
  • 目标空间必须可修改
  • 字符串自己给自己追加,如何?

在我们实现strcat的时候往往会出现下面这种情况

 原因如下:1.arr1中不知道'\0'的位置 导致arr2一直在找 找到后 bit添加到arr1中

                    2.arr1的空间不够大 已经形成了内存的越界访问

 代码实现

 5.模拟实现strstr

代码实现:

以上就是小王同学给友友们带来的五中库函数的模拟实现!

如果文章对大家有帮助的话  不如给个三连吧! 

 

猜你喜欢

转载自blog.csdn.net/weixin_59796310/article/details/123752480