首页 > 其他分享 >字符串函数strcpy.strcat.strcmp的应用和模拟实现

字符串函数strcpy.strcat.strcmp的应用和模拟实现

时间:2024-11-12 13:16:12浏览次数:3  
标签:src dest str2 str1 strcat ret char strcpy strcmp

strcpy 的应用和模拟实现

strcpy详解:

先来看下官网对strcmp的介绍。

在这里插入图片描述
绿色部分括号内为需要的两个参数.
第一个 char * destination 指的是目标字符串的起始地址;
第二个 conset char * source 指的是要拷贝的字符串;
最前面的 char * strcpy 表明返回类型为 字符指针.(返回目标空间destination的起始地址)

注意:用这个库函数时要引用头文件<string.h>

实例代码

int main()
{
	char dest[] = { "elon" };
	char src[] = { "musk" };
	strcpy(dest, src);
	//打印复制后的dest内容
	printf("%s\n", dest);
	return 0;
}

在这里插入图片描述
在这里大家可以看到 src 里的内容已经成功复制到了 dest 里面

细节注意:

  • 因为函数在拷贝字符串src时是到 \0 是才能停止。所以在将拷贝的内容放到dest是要确保dest里面有足够的空间(至少可以包含 \0 ),否则在后续使用 如打印dest时会因没有 \0 而报错。
  • 在这里插入图片描述

模拟实现:

char* my_strcpy(char* dest[], const char* src[])
{
	//保存目标函数的初始地址
	char* ret = dest;
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	//最后将 \0 也copy过去
	*dest = *src;
	return ret;
}

int main()
{
	char dest[] = { "elon" };
	char srce[] = { "musk" };
	my_strcpy(dest, srce);
	//打印复制后的dest内容
	printf("%s\n", dest);
	return 0;
}

函数内部while循环我们可以再优化一下:

char* my_strcpy(char* dest[], const char* src[])
{
	//保存目标函数的初始地址
	char* ret = dest;
	while (*dest++ = *src++)
		;
	return ret;
}

int main()
{
	char dest[] = { "elon" };
	char srce[] = { "musk" };
	char * ret = my_strcpy(dest, srce);
	//用my_strcpy的返回值打印复制后的内容
	printf("%s\n", ret);
	return 0;
}

这里我们也可以用my_strcpy的返回值打印复制后的内容。

strcat 的应用和模拟实现

strcat详解:

先来看下官网对strcat的介绍。

在这里插入图片描述
绿色部分括号内为需要的两个参数.
第一个 char * destination 指的是被链接字符串的起始地址;
第二个 conset char * source 指的是要连接的字符串的起始地址;
最前面的 char * strcat 表明返回类型为 字符指针.(返回目标空间destination的起始地址)

注意:用这个库函数时要引用头文件<string.h>

实例代码

int main()
{
	char dest[20] = { "elon " };
	char src[] = { "musk" };
	char * ret = strcat(dest, src);
	//打印连接后的dest内容
	printf("%s\n", ret);
	return 0;
}

在这里大家可以看到 src 里的内容已经成功连接到了 dest 后面

细节注意:

  • 目标空间同样要保留足够的空间,防止溢出
    在这里插入图片描述

模拟实现:

char* my_strcat(char* dest, const char* src)
{
	//保存目标函数的初始地址
	char* ret = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *src++)
		;
	return ret;
}

int main()
{
	char dest[20] = { "elon " };
	char src[] = { "musk" };
	char * ret = my_strcat(dest, src);
	//打印连接后的dest内容
	printf("%s\n", ret);
	return 0;
}

strcmp 的应用和模拟实现

strcmp详解:

先来看下官网对strcmp的介绍。

在这里插入图片描述

对返回值的介绍:

在这里插入图片描述
翻译后:
在这里插入图片描述

  • 绿色部分括号内为需要的两个参数.是要对比的两字符串的起始地址。
  • 两字符串的对比方法是逐位对比对应字符的ASCII码(\0 的ASCII值最小为 0)
  • 在逐位对比中最先出现的 ASCII小的那个字符所在字符串 即小于另一个字符串。
    eg: “abcdef” < “abd” 返回一个小于零的数
  • 最前面的 int 表明返回类型为 整形。

注意:用这个库函数时要引用头文件<string.h>

实例代码

int main()
{
	char str1[] = { "abc" };
	char str2[] = { "abd" };
	int ret = strcmp(str1, str2);
	//打印判断结果
	if (ret < 0)
	{
		printf("str1 < str2");
	}
	else if (ret > 0)
	{
		printf("str1 > str2");
	}
	else
	{
		printf("str1 = str2");
	}
	return 0;
}

运行结果

在这里插入图片描述

模拟实现:

int my_strcmp(char* str1, char* str2)
{
	//断言下两个指针非空
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str1 = '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

int main()
{
	char str1[] = { "abc" };
	char str2[] = { "abd" };
	int ret = my_strcmp(str1, str2);
	//打印判断结果
	if (ret < 0)
	{
		printf("str1 < str2");
	}
	else if (ret > 0)
	{
		printf("str1 > str2");
	}
	else
	{
		printf("str1 = str2");
	}
	return 0;
}

今天内容到此结束,欢迎大家三连。

标签:src,dest,str2,str1,strcat,ret,char,strcpy,strcmp
From: https://blog.csdn.net/Pioneer_ing/article/details/143694593

相关文章

  • [Zer0pts2020]easy strcmp
    [Zer0pts2020]easystrcmpdie查壳找到加密函数如何找到加密函数的找到init函数,跟进funcs_889、跟进使用x交叉引用qword_201090即可找到主加密函数那这个加密函数是如何连上main函数的呢?mainmain函数这里运用了strcmp,但我们却找不到strcmp到底对比了什么但根据我......
  • C++ 基础-面试题02(final和override关键字、sizeof和strlen区别、strcpy、sprintf 与me
    1.final和override关键字在C++中,final和override关键字是在面向对象编程中用于处理类的继承和多态的。它们主要用于管理派生类和虚函数,提供额外的安全性和代码可读性,防止意外的函数重写或错误的重载行为。1.final关键字final关键字用于防止进一步的继承或函数重......
  • c语言模拟实现库函数 strlen strcpy strcat strcmp strstr
    一、模拟实现库函数strlen解释:strlen是求字符串长度的,求出的长度是不可能为负数所以返回类型设置为size_t也是合情合理的 typedefunsignedintsize_t\注意字符串已经'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')。size_......
  • 字符串比较函数的编写(自己编写一个strcmp函数)
    //17.字符串比较函数的编写\nintdemo2(charstr1[],charstr2[]){ while((*str1++==*str2++)&&*str1&&*str2){//不等长则跳出时指向当前不相等位(++后有一位为空),等长不一样则跳出时指向不相等的下一位 // printf("%c%c\n",*str1,*str2); } if((*str2==*str1)&&(*......
  • sprintf_s strcat_s
    strcat_s函数原理:dst内存空间大小=目标字符串长度+原始字符串场地+‘\0’;获取内存空间大小使用sizeof函数(获取内存空间大小);获取字符串长度使用strlen函数(查字符串长度charsrc[1024]={"C/C++教程-strcat_s函数"};chardst[1024]={"www.codersrc.com"};//注意:str......
  • 新手专科准大一学习c语言的第10天之strcpy、memset、自定义函数的学习与应用
    strcpystrcpy是C语言标准库中的一个字符串操作函数,用于将源字符串复制到目标字符串中。#include<stdio.h>#include<string.h>intmain(){chararr1[50];//确保目标数组足够大,能够容纳源字符串chararr2[]="helloworld";//源字符串......
  • C语言 之 strlen、strcpy、strcat、strcmp字符串函数的使用和模拟实现
    文章目录strlen的使用和模拟实现函数的原型strlen模拟实现:方法1方法2方法3strcpy的使用和模拟实现函数的原型strcpy的模拟实现:strcat的使用和模拟实现函数的原型strcat的模拟实现:strcmp的使用和模拟实现函数的原型strcmp的模拟实现本章的内容主要讲解这4个与字符......
  • 常见 字符串库函数 的使用与模拟实现 #strlen #strcpy #strcat #strcmp#strstr #strto
    文章目录前言路漫漫其修远兮,吾将上下而求索。在C语言之中,提供了字符类型,也有字符串的概念,但是却并没有字符串的类型。没有类型就不方便操作,于是乎就提供了一系列的字符串函数来支持对字符串的操作;一、求字符串长度strlen专门用来求字符串长度的函数size_t strl......
  • 每天深解一个字符串类函数之strcat函数
    目录前言:一、引用头文件二、strcat函数的作用三、理解strcat函数的定义1、返回类型2、参数四、使用strcat函数1、编写代码2、调试运行控制台监视器五、注意要点六、模拟实现前言:每天深入了解一个字符串类函数今天我们要学习的是strcat函数,一个追加字符串......
  • strlen求字符串长度 模拟实现strlen函数 strcpy函数 模拟实现strcpy strcat函数 模拟
    文章目录1.1strlen求字符串长度1.2模拟实现strlen函数2.1strcpy函数2.2模拟实现strcpy3.1strcat函数3.2模拟实现strcat1.1strlen求字符串长度strlen是一个库函数所包含的头文件为#include<string.h>,这里我们可以在Cplusplus上找到strlen所包含的头文件以及strlen......