字符串函数与内存函数实现

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读 半波整流是一种利用二极管的单向导通特性,将交流电转换为直流电的基础电路。它通过“切除”交流电的半个周期,仅保留另外半个周期来实现整流。1 开关电源超快学习思路点击跳转1.1开关电源的原理、结构和实物入门篇-超简单解读点击跳转1.2开关电源的EMI输入电路-超简单解读点击跳转倍压整流适用于需要高电压、小电流的特殊场合,通过电容充放电实现电压倍增。 阅读详情

目录

一、strcmp函数

1.strcmp函数声明

2.strcmp函数头文件

3.strcmp函数使用例 

 4.my_strcmp模拟strcmp函数实现

二、strstr函数

1.strstr函数声明

2.strstr函数头文件

3.strstr函数使用例 

 4.my_strstr模拟strstr函数实现

三、memcpy函数 

1.memcpy函数声明

2.memcpy函数头文件 

3.memcpy函数使用例 

4.my_memcpy模拟memcpy函数实现

四、memmove函数 

1.memmove函数声明

2.memmove函数头文件

3.memmove函数使用例 

 4.my_memmove模拟memmove函数实现


一、strcmp函数

1.strcmp函数声明

int strncmp(const char* str1, const char* str2, size_t n);

2.strcmp函数头文件

# include<stdio.h>

3.strcmp函数使用例 

函数使用解释:把str1所指向的字符串和str2所指向的字符串进行比较,相等时返回0,是str1大于或者小于str2时返回值不为0

#include<stdio.h>
#include<string.h>
int main()
{
    char a[20] = "zhangsan";
    char b[20] = "zhangmou";
    int ret = strcmp(a, b);
    if (ret < 0)
        printf("<\n");
    else if (ret == 0)
        printf("==\n");
    else
        printf(">\n");
}

 4.my_strcmp模拟strcmp函数实现

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
    assert(str1 && str2);
    while (*str1 == *str2)//相等就向后跳一位
    {
        if (*str1 == '\0')//防止到\0时还没有结束
            return 0;
        str1++;
        str2++;
    }
    if (*str1 > *str2)
        return 1;
    else
        return -1;
}
int main()
{
    char a[20] = "zhangsan";
    char b[20] = "zhangmou";
    int ret = strcmp(a, b);
    if (ret < 0)
        printf("<\n");
    else if (ret == 0)
        printf("==\n");
    else
        printf(">\n");
}

 my_strcmp模拟实现strcmp函数,实现时是字节对等,相等则跳过,不相等了则跳出,判断两者的大小,一般情况我都用于等于零的情况。


二、strstr函数

1.strstr函数声明

char* strstr(const char* str1, const char* str2);

2.strstr函数头文件

#include<string.h>

3.strstr函数使用例 

函数使用解释:函数用于判断字符串str2是否是str1的子串 ,则该函数返回str2在str1中首次出现的地址,如果不存在子串返回NULL

#include<stdio.h>
#include<string.h>
int main()
{
	char a[] = "123456";
	char b[] = "23";
	char* ret = strstr(a, b);
	if (ret == NULL)
	{
		printf("子串不存在\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

运行结果:

 4.my_strstr模拟strstr函数实现

 

#include<stdio.h>
char* my_strstr(const char* str1, const char* str2)
{
	const char* s1 = str1;
	const char* s2 = str2;
	const char* p = str1;
	while (*p)
	{
		s1 = p;
		s2 = str2;
		while (*s1!='\0'&&s2!='\0'&& * s1 == *s2)//每次对比一下,但是两个都不等于\0的情况下
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')//如果s2在这里等于\0说明对比完了,找到直接返回
			return p;
		p++;
	}
}
int main()
{
	char a[] = "abcde";
	char b[] = "bcd";
	char* ret = my_strstr(a, b);
	if (ret == NULL)
	{
		printf("子串不存在\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

 

这里的p是为了固定字符串的首地址,返回时直接从字符串首地址打印,s1与s2对比,全部对等时输出

运行结果:bcde


三、memcpy函数 

1.memcpy函数声明

void* memcpy(void* str1, const void* str2, size_t n);

2.memcpy函数头文件 

#include<stdio.h>

3.memcpy函数使用例 

memcpy函数使用解释:从存储区str2复制n个字节到存储区str1

#include<stdio.h>
#include<string.h>
int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	int b[20] = { 0 }; 
	memcpy(b, a, 20);//将a的值赋值给b
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		printf("%d ", b[i]);
	}
	return 0;
}

运行结果:1 2 3 4 5

4.my_memcpy模拟memcpy函数实现

#include<stdio.h>
#include<string.h>
void* my_memcpy(void * dest, const void * str, size_t n)
{
	void* ret = dest;
	while (n--)
	{
		*(char*)dest = *(char*)str;
		dest = (char*)dest + 1;
		str = (char*)str + 1;
	}
	return ret;
}
int main()
{
	char a[] = "hello";
	char b[] = "world";
	my_memcpy(a, b, strlen(b));//strlen函数计算字符串长度
	printf("%s\n", a);
	return 0;
}

该函数的实现通过一个字节一个字节的搬运,那直观的实现任何字节数的存储复制


四、memmove函数 

1.memmove函数声明

void* memmove(void* dest, const void* src, size_t num);

2.memmove函数头文件

 #include<stdio.h>

3.memmove函数使用例 

函数使用解释:当数组1和数组2 所指的内存区域重叠时,memmove仍然可以复制覆盖,不过执行效率上会比使用 memcpy

#include<stdio.h>
#include<string.h>

int main()
{
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	memmove(a+2,a , 20);   
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

运行结果:1 2 1 2 3 4 5 8 9 10

 4.my_memmove模拟memmove函数实现

#include<stdio.h>
void* my_memmove(void *dest,const char *str,size_t n)
{
	void* ret = dest;
	if (dest < str)//位置在后面时,从前到后覆盖
	{
		while (n--)
		{
			*(char*)dest = *(char*)str;
			dest = (char*)dest + 1;
			str = (char*)str + 1;
		}
	}
	else	//位置在开头,从后到前覆盖
	{
	
		while(n--)
		{
			*((char*)dest + n) = *((char*)str + n);
		}
	}
	return ret;
}
int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(arr1 + 2, arr1, 20);
	for(int i=0;i<10;i++)
	printf("%d ", arr1[i]);
	return 0;
}

注:memmove函数运行dest在str前就  从前到后覆盖

注:dest在str前就  从后到前覆盖

 

 

RSA 2048/4096 签名校验算法 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能... 阅读详情

相关推荐

知识检索中的四大评估指标:准确率、精确率、召回率与F1分数详解

摘要:NLP算法面试中,评估知识检索系统的核心指标包括准确率、精确率、召回率和F1分数。准确率衡量整体预测正确性,但在样本不均衡时可能失真;精确率关注预测正类中的真实比例(查准能力),召回率衡量真实正类被预测的比例(查全能力)。F1分数是两者的调和平均,提供综合评估。这些指标通过混淆矩阵计算,并存在制约关系:提高召回率往往降低精确率,反之亦然。应用场景包括文档检索(评估结果质量和覆盖度)和文本分类(如垃圾邮件过滤)。面试需掌握指标区别、适用场景及平衡方法(如调整阈值)。F1分数在样本不平衡时比准确率更具参考

Ven%的博客 1764

c语言strstr函数详解,关于c:c语言中strstr函数的一个注意点

明天说一个之前工作上遇到过的一个问题,也是之前没留神过的一个点。先看一段代码:#include #include int main(){char sz1[16] = {0};char sz2[10] = {0};char sz3[3] = {0};strncpy(sz1, "bbAAcc", sizeof(sz1)-1);strcpy(sz3, "AA");if ( strstr(sz1, sz2...

weixin_39628160的博客 484

11.15 分析finrl 的框架

11.15 分析finrl 的框架

yueguoqing88的博客 1085

模拟实现strcpy、strcat、strstr、strtcmp

模拟实现strcpy:字符串拷贝 char *my_strcpy(char *dst,const char *src) { assert(dst); assert(src); char *ret = dst; while(*dst &amp;amp;amp;&amp;amp;amp; *src) { *dst = *src; dst++; ...

小心眼儿猫的博客 335

S4HANA Rebate Management(条件合同) -Single Step

S4HANA 条件合同管理(Condition Contract Management), 包括如何创建条件合同,场景应用

m0_50200150的博客 2308

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 161

库函数strstr的实现

函数strstr的原型是char *strstr(char *str1, char *str2); 其功能是在str1中返回指定字符串str2的第一次出现的位置。 #include    #include    int main(void)   {       char *str1 = "Borland International", *str2 = "nation", *p

promise_LOVE的专栏 735

从仿真到现实:BeamDojo双足机器人项目实战指南(附完整配置清单)

本文提供了一份基于BeamDojo项目的双足机器人从仿真训练到现实部署的完整实战指南。详细拆解了硬件选型(如宇树G1、Jetson Orin NX、Livox Mid-360)、Isaac Gym仿真环境搭建、强化学习训练技巧(如双评论家架构、课程学习)以及关键的Sim2Real迁移策略,旨在帮助开发者将前沿研究成果转化为可落地的工程实践。

hhh00的博客 877

STM32和广和通L610连接腾讯云(二)

是 C 和 C++ 标准库中用于字符串处理的函数之一。它的作用是在一个字符串(称为。下载代码进行测试,ok了,大功告成。新建一个bsp.c和bsp.h。)中查找另一个字符串(称为。在while(1)前添加。在while(1)后添加。)的第一个出现位置。

m0_62281047的博客 1476

IPCP(IP Control Protocol,IP控制协议)

IPCP(IP Control Protocol,IP控制协议)

天赐好车的博客 757

利用Dify平台打造大学生专属AI模拟面试助手:从零到精通的完整指南

在这个充满竞争的就业市场中,拥有一个24小时在线的AI面试教练无疑是大学生求职路上的秘密武器。通过本文的指导,你已经掌握了使用Dify平台构建专业级模拟面试助手的全套技能。从环境部署、模型选择,到Prompt设计、知识库集成,再到高级功能开发和效果优化,我们一步步打造了一个能够适应不同岗位、提供专业反馈的智能面试系统。无论是技术岗的算法问答,还是咨询业的案例分析,或是外企的英语面试,你的定制助手都能提供针对性训练。更重要的是,这个方案具有极强的可扩展性。

专注于编程、AI、人工智能等多个领域内容研究和分析 2790

EC20连接阿里云操作流程,AT_MQTT协议连接,详细

实际开发环境: 1阿里云平台创建产品 1.1登录阿里云物联网平台,新用户首先注册账号 1.1.1 网址链接:https://help.aliyun.com/document_detail/73728.html?spm=a2c4g.11174283.6.571.3a8b1668Vmv5CZ,这个连接是阿里云物联网平台使用流程说明,可以在这里注册和登录账号 1.1.2 建议使用淘宝或支付宝账号注册登录 1.1.3 我这里使用的是淘宝账号登录,输入账号和密码 1.1.4输入完账号,登...

weixin_40593838的博客 5684

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95

三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀

Coding... 2万+

C语言字符串函数模拟与内存函数模拟实现

strcpy函数基本构成如上,传入要拷贝字符串的地址用source接收,以及传入要拷贝到那个字符串上去的地址用destination接受,返回一个char*类型的指针。strcmp()函数的作用是比较两个字符串,如果相通则返回0,如果str1大于str2,则返回一个大于0的数字,反之则返回一个小于0的数字。这里的想法是,如果要在dest的后面追加字符串,那么首先要找到dest这个字符串的末尾,从这个末尾开始追加src。这个函数的作用与strcpy的作用类似,但是这个函数可以限制拷贝的长度。

2302_77186349的博客 512

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【C语言深度解析】手把手实现字符串函数与内存函数

本文详细解析了C语言中字符串函数和内存函数的实现原理。字符串函数部分涵盖了strlen(三种实现方式)、strcpy、strcmp、strcat和strstr的实现,重点讲解了指针操作、空指针防护和'\0'处理。内存函数部分介绍了memset的实现,强调void*指针的通用性和按字节操作的特点。所有函数实现都包含核心逻辑解析和注意事项说明,帮助开发者深入理解底层原理。文章提供了完整的可运行代码,适合C语言学习者和准备技术面试的开发者参考。

CodeByV的博客 1301

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

字符串函数与内存操作函数总结与模拟实现

字符串函数 1.strlen 函数 (1)作用:用于求字符串长度,在遍历字符串时遇到 ‘\0’ 停止 (2)函数原型:size_t strlen ( const char* str) 注意事项:strlen的返回值是无符号整型,所以不能轻易比较大小 模拟实现:计数器、递归、指针相减三种方法 计数器方法 int my_strlen(char* str) { assert(str); //断言,避免str是空指

cdzg_zzk的博客 224

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

字符串 & 内存 函数的介绍与模拟实现

1.字符串函数的介绍与模拟实现 1.1 strlen的介绍与模拟实现 功能:获取字符串的长度 返回类型 : sizt_t 也就是 unsigned int 无符号整型 参数 : const 修饰的 char* 指针 模拟实现: 1.2 strcpy的介绍与模拟实现 功能: 拷贝一个字符串 返回类型:char* 指针 参数 : char* 指针的目的地 , const char* 指针的源头 模拟实现 : 1.3 strcmp的介绍与模拟实现 功能 :比较两个字符串 , 比较的是字符串的内容 ,

xqs196301的博客 284

C语言中字符串与内存函数的模拟实现

接下来,如果要深入学习这类函数,我们还得需要知道他们是如何实现的。但是其中涉及到的具体实现可能还有人不太清楚,所以还是来看看模拟实现。strlen函数的模拟实现。来看模拟实现是不是和。

luoye123123123的博客 229

字符串函数与内存函数的介绍以及模拟实现

文章目录字符串函数strlenstrcpystrcmpstrcatstrncpystrncatstrncmpstrstrstrtok内存函数memcpymemmovememcmp 字符串函数 strlen strcpy strcmp strcat strncpy strncat strncmp strstr strtok 内存函数 memcpy memmove memcmp 字符串函数 strlen 求字符串的长度, ...

m0_56769959的博客 160

C语言的字符串函数与内存函数的功能与模拟实现

字符串与内存函数 1.1 strlen 字符串长度 size_t strlen(const char* str);   有的编译器用int接受strlen的返回值会报错,因为size_t是无符号整形。 size_t sz=strlen(arr); printf("%u",arr); str指向的字符串必须包含’\0’,否则无法计算字符串长度。 -strlen函数返回无符号整形的问题: int main() { if(strlen("abc")-strlen("abcedf")>0)

CS_boy的博客 257

【C语言】字符串函数与内存函数的学习与模拟实现

今天我们对字符串函数与内存函数的相关知识又有了新的了解,学习了10个常用字符串操作函数以及3个常用内存函数的相关知识,完成了其中部分库函数的自定义模拟实现,希望我的文章和讲解能对大家的学习提供一些帮助。

Sherry的博客 710

【c语言:常用字符串函数与内存函数的使用与实现】

strlen、strcmp、strncmp、strcpy、strncpy、strcat、strncat、strstr、memcpy、memmove、memcmp函数的使用与实现

weixin_69380220的博客 1577

字符函数,字符串函数和内存函数的实现与模拟实现

字符函数,字符串函数,内存函数

Miaolihong1的博客 728

字符串与内存操作函数详解与模拟实现

字符串操作函数与内存操作函数的特点与模拟实现

k666499436的博客 2141

C语言字符串与内存库函数的介绍与模拟实现

⭐️前面的话⭐️ ???? 大家好!C语言库中为我们开发者提供了很多实用的函数,我相信不少小伙伴都用过有关字符串和内存的库函数,本文将围绕这两方面介绍有关的库函数并试着模拟实现部分的库函数!读完这篇文章你能学到: ????常见字符串与内存库函数的使用; ????掌握重要库函数的模拟实现。

未见花闻的博客 1187

字符串函数与内存函数的使用和模拟实现

字符串函数和内存函数

2402_82658387的博客 1099
上一篇: 详解动态开辟问题
下一篇: 快速了解文件操作
学习自省
博客等级 码龄5年 284粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值