[c语言]对各种字符串库函数的实现strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove

[漏洞利用]利用五次Shift越权破解win7\win10开机密码 注:第一个学习和接触的Windows漏洞 文章目录本机实验环境前置知识漏洞原理漏洞介绍漏洞验证解决方法基本流程介绍详细步骤截图 本机实验环境 虚拟机:VMware Workstation 14 pro 操作系统:Windows10 前置知识 1、cmd工具路径 c:\windows\system32\cmd,按五次shift默认调用同目录下sethc文件,其路径为“c:\windows\system32\sethc.exe” 2、用户/账户密码存储位置 c:\windows\system32\config\ 阅读详情

1.模拟实现strcpy

//1.模拟实现strcpy(字符串拷贝)
#include<stdio.h>
#include<assert.h>
char * my_strcpy(char *dest,const char *str)
{
 	char *p = dest;
	assert(dest);
 	assert(str);
 	while(*dest++ = *str++)
 	{
  		;
 	}
 return p;
}
int main()
{
 	char *arr = "hello world";
 	char a[1024] = {0};
	my_strcpy(a,arr);
 	puts(a);
 	return 0;
}

2.模拟实现strcat

//2.模拟实现strcat(字符串拼接)
#include<stdio.h>
#include<assert.h>
char * my_strcat(char *dest,const char *src)
{
 	char *p = dest;
 	assert(src);
 	while(*dest)//不能用while(*dest++),因为strcat的功能是把src所指字符串添加到dest结尾处(覆盖dest结尾
               //处的'\0')并添加'\0',while(*dest++)在循环结束后还会执行一次++,会指向'\0'的下一个位置
 	{
  		dest++;
 	}
 while(*dest++ = *src++)
 {
  	;
 }
 return p;
}
int main()
{
 	char *str = "man";
 	char arr[1024] = "hello ";
 	my_strcat(arr,str);
 	puts(arr);
 	return 0;
}

3.模拟实现strstr

//3.模拟实现strstr(字符串查询,一个字符串是否是另一个字符串的子串)
#include<stdio.h>
#include<assert.h>
char * my_strstr(char *dest, const char *src)
{
	 const char *s1 = dest;//父串
	 const char *s2 = src;//子串
	 const char *cur = dest;//记录父串地址
	 assert(dest);
	 assert(src);
	 if(*src == '\0')
  		return dest;
 	while(*cur)
 	{
		  s1 = cur;
		  s2 = src;
 	 while(*s1 == *s2 && *s1 != '\0' && *s2 != '\0')//注意一定要判断是否到'\0',否则会死循环
	  {
		   s1++;
		   s2++;
	  }
	  if(*s2 == '\0')
	  {
	   	return (char *)cur;
	  }
	  if(*s1 == '\0')
 	 {
   		return NULL;
 	 }
  	cur++;
 	}
 	return NULL;
}
int main()
{
	 char *arr1 = "i am a student";
	 char *arr2 = "student";
	 char *ret = my_strstr(arr1,arr2);
	 puts(ret);
	 return 0;
}

4.模拟实现strchr

//4.模拟实现strchr(查找一个字符在字符串首次出现的位置)
#include<stdio.h>
#include<assert.h>
char * my_strchr(const char *dest,int n)
{
 	assert(dest);
 	while(*dest)
 	{
  		if(*dest == n)
  		{
   			return (char*)dest;
  		}
  		dest++;
 	}
 	return NULL;
}
int main()
{
 	char *str = "asdfghjk,l";
 	char *ptr = my_strchr(str,'h');
 	printf("%c这个字符在%s的首字符\n",'h',ptr);
 	return 0;
}

5.模拟实现strcmp

//5.模拟实现strcmp(比较字符串)
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char *str1,const char *str2)
{
	 assert(str1);
	 assert(str2);
 	while(*str1 && *str2)
 	{
  		if(*str1 > *str2)
   		return 1;
		else if(*str1 < *str2)
		return -1;
		else 
	  	{
   			str1++;
   			str2++;
  		}
 	}
 	return 0;
}
int main()
{
 	char *arr1 = "good";
 	char *arr2 = "bad";
 	int ret = my_strcmp(arr1,arr2);
 	if(ret > 0)
 	{
  		printf("字符串1大于字符串2\n");
 	}
 	else if(ret < 0)
 	{
  		printf("字符串1小于字符串2\n");
 	}
 	else
 	{
  		printf("两字符串相等\n");
 	}
 	return 0;
}

6.模拟实现memcpy

//6.模拟实现memcpy(从源指向的位置(起始位置)将count字节的值直接复制到目标指向的内存块)
#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dest,const void *src,size_t count)
{
	 char *p = dest;//给目标和源转换类型,否则void*不知道大小
	 char *p1 = dest;
	 const char *p2 = src;
	 assert(dest);
	 assert(src);
	 while(count--)
	 {
	  	*p1++ = *p2++;
 	}
 	return p;
}
int main()
{
 	char arr1[1024] = {0};
 	char *arr2 = "hello world";
 	my_memcpy(arr1,arr2,7);
 	puts(arr1);
 	return 0;
}

7.模拟实现memmove

//7.模拟实现memmove(从源指向的位置拷贝count个字节的值放在目标所指向的位置)
//memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,
//memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
//但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
#include<stdio.h>
#include<assert.h>
void * my_memmove(void *dest,const void *src, size_t count)
{
	 char *ret = dest;
	 char *p1 = dest;
	 const char *p2 = src;
	 assert(src);
	 assert(dest);
	 if(dest < src)
	 {
	  	while(count--)
	  	{
	   		*p1++ = *p2++;
	  	}
	 }
	 else
	 {
	  	while(count--)
  		{
   			*(p1+count) = *(p2+count);
  		}
 	}
 	return ret;
}
int main()
{
	 char str1[1024] = "abcde";
	 char *str2 = "fghijk";
	 my_memmove(str1+4,str2,5);
	 puts(str1);
	 return 0;
}
“探索thumbdata4文件的奥秘:编程中的神秘存在“ 综上所述,thumbdata4文件在编程中是一个常见的存在,与图库应用程序和图片浏览器密切相关。通过使用适当的库和工具,我们可以读取和处理thumbdata4文件中的缩略图数据,以提供更好的用户体验。我们首先读取8字节的块头,其中包含了下一个缩略图块的大小。你可以根据自己的需求来定义对块数据的处理方式,例如将其保存为图像文件或进行其他的分析操作。thumbdata4文件通常以二进制格式存储,其中包含着设备上浏览过的图片的缩略图。因此,你可能需要根据具体的thumbdata4文件结构进行适当的解析和处理。 阅读详情

相关推荐

Blender SMPL-X 插件安装

Blender XMPL-X 插件安装

heleneveryday的专栏 5358

strcpy函数和strcat函数

strcat函数: 将两个char类型连接。 char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s); 结果放在d中 printf("%s",d); 输出 d 为 GoldenGlobalView (中间无空格) d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。 返回指向d的指针。 原型是extern char *strca...

有趣的人生 一半是山川湖海 一半是初心情怀 833

RV1126 MIPI CSI-2驱动RGB888图像采集的V4L2实战解析

本文详细解析了在RV1126平台上通过MIPI CSI-2接口采集RGB888格式图像的完整V4L2实战流程。核心内容包括设备树(DTS)配置、内核驱动适配、Media Controller链路调试,以及使用v4l2-ctl工具进行图像抓取与验证的方法,旨在帮助开发者打通从硬件连接到稳定采集RGB888图像数据的关键环节。

weixin_29161719的博客 166

C语言中strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove函数的实现

1、strcpy函数 (1)、函数功能: strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy. (2)、代码实现 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; const char* my_strcpy (char* arr2, const char* arr1) { ...

A__B__C__的博客 744

阿里云百炼平台创建智能体-上传文档

阿里云百炼智能体-上传文档文件

weixin_43930851的博客 1355

手把手教你学Simulink——电机电磁兼容与可靠性场景示例:基于Simulink的电机噪声抑制控制仿真

本文带你完成了电机噪声抑制控制的Simulink仿真,实现了:✅ 揭示了电磁噪声从电流到声音的传递机理✅ 搭建了含死区、固定载波等噪声源的高保真模型随机PWM(消除啸叫)谐振控制器(抑制5/7次嗡鸣)谐波注入(降低THD) ✅ 通过综合方案将噪声降低10 dB以上(感知响度减半!) ✅ 为产品静音品质提升提供可落地的控制方案。

MHD0815的博客 94

字符串处理函数(aoke学习笔记)

★C++标准库提供了兼容C语言的字符串处理函数 #include <string.h> 字符串复制函数 (string copy) △strcpy strcpy(str1,str2); //复制str2到str1 △strncpy strncpy(str1,str2,n); //复制str2中不超过n个字符的字符串复制到str1 字符串连接函数 (string catena...

Aoke20020226的博客 597

用 C# 快速构建一套可扩展的上位机框架(实战+源码思想)

本文介绍了一套基于C#的工业上位机开发框架设计方案。该框架通过模块化设计解决了上位机开发中的常见痛点,包括协议适配、通信管理、UI绑定等问题。核心架构采用分层设计,包含协议接口层、调度器层、通信抽象层和UI层,支持MVVM模式。框架提供了协议插件化扩展能力,通过JSON配置实现设备协议定义,同时封装了日志管理、异常处理等基础功能。该方案具有快速搭建、协议驱动、UI分离等特点,可显著提升上位机开发效率,适用于串口、TCP等多种通信场景,并能快速适配新设备协议。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 884

C语言字符串库函数strcpy,strncpy,strcat,strncat,ctrcmp,strncmp的简介与实现

C语言字符串复制,连接,比较函数的简介与模拟实现

Ma_Nong666的博客 1675

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9549

【教程4>第6章>第3节】LS信道估计与均衡系统MATLAB仿真实现

1]姬国伟,葛利嘉,龙秀虹.基于LS信道估计的SC-FDE系统性能研究[J].军事通信技术, 2010(1):6.DOI:CNKI:SUN:JSTY.0.2010-01-013.在无线通信中,信号在空间传播时,随着传输距离增加,能量会逐渐扩散,导致信号幅度减小,即发生衰减。第四个图表示的是提取的信道估计值,可以看到,在不插值的前提下,得到的信道估计值基本接近真实的信道h。从第五个图可知,通过信道估计,对接收信号进行了校正和补偿。信道模型,先通过awgn加入噪声,然后乘以hreal,模拟通过信道。

FPGA/MATLAB学习教程/源码/项目合作开发 388

C字符串函数运用(strlen-strcpy-strcat-strncat-strcmp-strrev-strlwr-strupr-strchr-strstr)

文章目录: 一:基本概念 1.占用内存 2.字符串的初始化 3.字符串与指针 4.字符串的输出 二:声明打印字符串 1.声明 2.打印字符串 三:输入gets()打印puts()函数 1. 输入gets()函数 2.打印puts()函数 四:常用字符串函数 1.strlen()函数 2.strcpy(destination,source)函数 3.strcat(first_string, second_string)函数 4.字符串拼接(strncat)函数 5.st...

刘鑫磊 1293

工业4.0必备:C#上位机+数字孪生 生产线实时监控与智能预警系统(工业级实战)

数据割裂:PLC、传感器、工业相机的数据散落在不同系统,想看全局生产状态要切换N个软件,“数据孤岛”导致决策滞后;故障难预判:设备突发故障时,只能停机排查,平均故障响应时间超30分钟,一条生产线停工1小时损失超10万;可视化差:传统监控只有冰冷的数字和2D图表,设备运行状态、生产流程、物料流转无法直观感知,新人上手需3个月才能熟悉产线。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 659

模拟实现字符串库函数及字符串函数注意事项

1.实现strlen.(求字符串长度) size_t strlen ( const char * str ); 字符串已经'\0' 作为结束标志,strlen函数返回的是在字符串中'\0' 前面出现的字符个数(不包 含'\0' )。 参数指向的字符串必须要以'\0' 结束。 注意函数的返回值为size_t,是无符号的( 易错)。 模拟实现: #define _CRT_SECURE...

夜微雨的博客 306

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言字符串库函数 #include <string.h>

c语言字符串库函数#include<string.h> 在头文件<string.h>中定义了两组字符串函数。第一组函数的名字以str开头;第二组函数的名字以mem开头。只有函数memmove对重叠对象间的拷贝进行了定义,而其他函数都未定义。比较类函数将其变量视为unsigned char类型的数组。 1 strcpy #include <string.h> char* strcpy(char *str1, const char *str2); 把字符串str2(包括

leonoe121的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【c基础】常用字符串库函数

字符串库函数

hutaotaotao的博客 3059

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

模拟实现strcpy,strcmp,strcat,strstr,strchr,memcpy,memmove(day8)

#include<stdio.h> #include<string.h> #include<assert.h> char *Strcpy(char *dest, const char* src) { char *ret = dest; assert(dest != nullptr); assert(src != nullptr); while ((*d...

USA_AM_1966的博客 275

C语言字符串函数总结

char *data;if (!if (!return s;// 需要重新分配if (!return 0;优化技术适用场景性能提升复杂度兼容性字长优化长字符串操作高中平台相关循环展开固定长度操作中低通用数据预取顺序访问模式中高平台相关SIMD指令批量数据处理很高高平台相关缓存友好大数据集处理高中通用。

X 969

C语言字符串函数深度解析:从strcpy到strtok的实战指南与安全编程

在C语言编程中,字符串处理是基础且核心的技术环节。由于C语言没有内置字符串类型,而是通过字符数组和空字符'\0'来模拟,因此程序员必须手动管理内存和边界检查。其原理依赖于标准库<string.h>和<stdio.h>中的一系列函数,这些函数直接操作内存,高效但风险并存。掌握这些函数的技术价值在于能够编写出健壮、高效的文本处理代码,避免缓冲区溢出等安全漏洞。在实际应用场景中,无论是解析配置文件、处理用户输入,还是构建网络协议,都离不开字符串复制、比较、查找和分割等操作。本文聚焦于strcpy、strncpy、

weixin_30388677的博客 301

C语言字符串函数模拟实现:从strcpy到strcat的底层原理与安全实践

在C语言编程中,字符串处理是基础且核心的操作,涉及指针、内存管理和安全编程等关键概念。标准库提供的字符串函数如strcpy、strcmp等,其底层原理基于指针运算和内存操作,理解这些原理对于编写高效、健壮的代码至关重要。这些函数的技术价值在于它们封装了常见的字符串操作,但同时也引入了缓冲区溢出等安全风险,因此在工程实践中需要特别注意边界条件。应用场景广泛,从嵌入式系统到操作系统内核开发,都需要对字符串操作有深刻理解。本文通过模拟实现strlen、strcpy、strcmp和strcat等函数,深入探讨了指针

weixin_33802505的博客 351

C语言字符串函数全解析:从基础原理到安全编程实践

在C语言编程中,字符串处理是核心基础,涉及字符数组、内存管理和空字符终止等底层概念。其原理基于对连续内存字节的直接操作,通过标准库函数实现高效的数据处理。掌握这些函数的技术价值在于能够编写出高效、稳定且内存安全的程序,避免缓冲区溢出等常见漏洞。在应用场景上,无论是系统编程、嵌入式开发还是网络数据处理,都离不开字符串的复制、比较、查找与分割等操作。本文聚焦于C语言字符串函数,深入探讨strcpy、strncpy、strcat等关键工具的安全用法与典型陷阱,并结合strlen和memcpy等函数,解析如何在实际

weixin_30650039的博客 287

C语言字符串处理函数深度解析:从原理到实战避坑指南

字符串处理是编程中的基础操作,尤其在C语言这类系统级编程中,对内存和性能的控制至关重要。其核心原理在于通过字符数组和终止符'\0'来管理文本数据,这直接关系到程序的健壮性与安全性。理解字符串函数的底层行为,能有效避免缓冲区溢出、内存泄漏等常见问题,提升代码质量。在嵌入式开发、系统编程等场景中,高效的字符串操作是保障程序稳定运行的关键。本文聚焦于C语言标准库中的字符串处理函数,深入剖析strcpy、strncpy、strcat等常用但易错函数的实现细节与使用陷阱,并结合strtok、strerror等函数,提

weixin_33676492的博客 450

c语言实现字符串反转 笔试题,C语言字符串库函数的实现也是笔试题常考的题目,以下代码没有严格测试,只是简单的实现:...

C语言字符串库函数的实现也是笔试题常考的题目,以下代码没有严格测试,只是简单的实现:1.intstrlen(constchar*str)//求字符串的长度2.char*strcpy(char*to,constchar*from)//字符串复制函数3.void*memset(void*buffer,intc,size_tcount)//把指定内存区域的前count个字...

weixin_35756690的博客 214

字符串库函数的模拟实现

1.strcpy(字符串拷贝) strcpy(arr,str):arr是要拷贝的空间,str是要被拷贝的字符串。 #include <stdio.h> #include <assert.h> char* my_strcpy(char*dest,const char*str) { char* ret = dest;//保存dest初始位置 assert(dest&...

weixin_45511964的博客 167

常用c语言字符串库函数(自行实现)

strlen strcpy strcat strstr strcmp strchr memcpy memmove 优化版冒泡函数 经典的二分查找 求第N个斐波那契数 联合体判断系统大端小端 strlen #include &lt;stdio.h&gt; #include &lt;assert.h&gt; //利用assert断言防止野指针,循环计数 int my_str...

漫鱼 3112

一些常用字符串操作函数的内部实现

常用的字符串库函数的内部实现,截自linux内核中的lib/string.c文件,绝对标准的程序,供大家参考。      memset: /*  * memset - Fill a region of memory with the given value  * @s: Pointer to the start of the area.  * @c:

World_2015的专栏 576
上一篇: [c语言]codeday15找出数组中出现一次的两个值以及喝汽水模拟实现strcpy和
下一篇: [c语言]模拟实现strncpy,strncat,strncmp
coolnut12138
博客等级 码龄9年 51粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值