库函数的模拟实现

目录

模拟实现strlen

模拟实现strcpy

模拟实现strcmp

模拟实现strcat

模拟实现strstr

模拟实现memcpy

模拟实现memmove


模拟实现strlen

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int MyStrlen(char* str)
{int len = 0;while (str[len] != '\0')len++;return len;
}int main()
{char str[50] = { "Hello,world!" };int ans = MyStrlen(str);printf("%d\n", ans);return 0;
}

模拟实现strcpy

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>char* MyStrcpy(char* str2, char* str1)
{char* p = str2;while (*p++ = *str1++);return str2;
}int main()
{char str1[50] = { "Hello,world!" };char str2[50];MyStrcpy(str2, str1);printf("%s\n", str2);return 0;
}

模拟实现strcmp

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int MyStrcmp(const char* str1, const char* str2)
{int i = 0;while (str1[i] != '\0' && str2[i] != '\0' && str1[i] == str2[i])i++;return str1[i] - str2[i];
}int main()
{const char* str1 = "apple";const char* str2 = "banana";const char* str3 = "apple";int ans1 = MyStrcmp(str1, str2);int ans2 = MyStrcmp(str1, str3);printf("%d\n%d", ans1, ans2);return 0;
}

模拟实现strcat

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>char* MyStrcat(char* str1, const char* str2)
{char* re = str1;while (*str1)str1++;while (*str2){*str1 = *str2;str1++;str2++;}*str1 = '\0';return re;
}int main()
{char str1[50] = "Hello,";const char* str2 = "world!";printf("%s\n", MyStrcat(str1, str2));return 0;
}

模拟实现strstr

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>char* MyStrstr(const char* str1, const char* str2)
{if (*str2 == '\0')return (char*)str1;while (*str1){const char* s1 = str1;const char* s2 = str2;while (*s1 && *s2 && (*s1 == *s2)){s1++;s2++;}if (*s2 == '\0')return (char*)str1;str1++;}return NULL;
}int main()
{const char* str1 = "Hello world";const char* str2 = "world";char* ans = MyStrstr(str1, str2);if (ans)printf("%ld\n", ans - str1);elseprintf("没找到\n");return 0;
}

模拟实现memcpy

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>void* MyMemcpy(void* brr, const void* arr, size_t size)
{char* b = (char*)brr;const char* a = (const char*)arr;for (size_t i = 0; i < size; i++)b[i] = a[i];return brr;
}int main()
{int arr[] = { 1, 2, 3, 4, 5 };int brr[5] = { 0 };MyMemcpy(brr, arr, sizeof(brr));int size = sizeof(brr) / sizeof(brr[0]);for (int i = 0; i < size; i++){printf("%d ", brr[i]);}return 0;
}

模拟实现memmove

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <string.h>
#include <cassert>void* MyMemmove(void* dest, const void* src, size_t size)
{assert(dest && src);char* ret = (char*)dest;if (dest < src){while (size--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else if (dest > src){while (size--){*((char*)dest + size) = *((char*)src + size);}}return ret;
}int main()
{int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };MyMemmove(arr + 3, arr, 20);for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

感谢大佬支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitLab升级版本(任意用户密码重置漏洞CVE-2023-7028)

目录 前言漏洞分析影响范围查看自己的GitLab版本升级路程 升级过程13.1.1113.8.8 - 14.0.1214.3.614.9.5 - 16.1.6 前言 最近GitLab发了个紧急漏洞需要修复&#xff0c;ok接到命令立刻着手开始修复&#xff0c;在修复之前先大概了解一下这个漏洞是什么东西 漏洞分析 1、组件…

单点登陆(SSO)基于CAS实现前后端分离的SSO系统开发「IDP发起」

关于其他前端常见登录实现单点登录方案&#xff0c;请见「前端常见登录实现方案 单点登录方案 」 前沿 单点登录&#xff08;SSO&#xff09;&#xff0c;英文全称为 Single Sign On。 SSO 是指在多个应用系统中&#xff0c;用户只需要登录一次&#xff0c;就可以访问所有相互…

redis-持久化-1

Redis 提供了2个不同形式的持久化方式。 RDB&#xff08;Redis DataBase&#xff09; AOF&#xff08;Append Of File&#xff09; 一、Redis持久化之RDB 1.什么是RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c; 也就是行话讲的Snapshot快照&#xff0c…

puppeteer实现截图

Window服务器说明 1.在本地安装 puppeteer 先创建一个本地文件夹puppeteer&#xff0c;我的地址D:\common_workspace\puppeteer 然后使用cmd打开这个文件夹所在位置&#xff0c;再执行如下两条命令即可。 npm install -g cnpm --registryhttps://registry.npm.taobao.orgcnpm …

剖析EasyExcel导入出现 The index of ‘xx‘ and ‘xx‘ must be inconsistent 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 在导出Excel的时候,出现如下问题: com.alibaba.excel.exception.ExcelCommonException: The index of tyreNumber and remark must be inconsistentat com.alibaba.exce

为什么需要数据仓库

为什么不在OLTP环境下分析&#xff1f; OLTP环境也会存储历史数据&#xff0c;但这些历史数据并不是业务运行所需的&#xff0c;这些历史数据需要经常归档到数据仓库&#xff0c;并且在OLTP数据库中删除。 相比之下&#xff0c;事务环境适用于连续处理事务&#xff0c;通常应…

搭建通讯猫类似的TCP服务端

最近需要一个公网的TCP服务端平台来做4G模组的发包测验&#xff0c;通讯猫(http://www.tongxinmao.com/App/Detail/id/1)貌似使用不了&#xff0c;就干脆在自己的腾讯云上搭建了简单的TCP服务端。 我们搭建可以在服务器上使用Python、Java、C#等语言自行编写服务器程序。 目前是…

KADB使用PXF连接KES验证

验证环境 KADB版本&#xff1a;Greenplum Database 6.0.0 build dev.V003R002C001B0181.d354cc9215 KES版本&#xff1a;KingbaseES V008R006C007B0012 Java版本&#xff1a;openjdk version "1.8.0_262" PXF部署 以下操作假设KADB和KES已经部署完成并且启动正常…

nomachine下载安装使用教程(远程桌面)

文章目录 参考链接 nomachine 参考链接 [1]【远程桌面】nomachine下载安装使用教程、zerotier下载安装使用教程超详细&#xff1a;https://blog.csdn.net/weixin_44029896/article/details/128555481 [2] 树莓派开发之旅&#xff08;一&#xff09;——使用Nomachine进行远…

java动态导入excel按照表头生成数据库表

1、创建接口接收文件 //controller层 PostMapping("/importExcel1")public void importExcel1(HttpServletRequest request, MultipartFile file) {try {waterMeterService.importExcel1(request,file);} catch (Exception e) {throw new RuntimeException(e);}}//se…

selenium执行出现异常,SessionNotCreatedException ChromeDriver only supports

问题现状&#xff1a; 运行程序报错&#xff1a; selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser version is 121.0.6167.85 with binary path /App…

重构改善既有代码的设计-学习(四):简化条件逻辑

1、分解条件表达式&#xff08;Decompose Conditional&#xff09; 可以将大块代码分解为多个独立的函数&#xff0c;根据每个小块代码的用途&#xff0c;为分解而得的新函数命名。对于条件逻辑&#xff0c;将每个分支条件分解成新函数还可以带来更多好处&#xff1a;可以突出条…

cartopy绘图特征

文章目录 添加特征add_feature区域截取 添加特征 cartopy中最基础的地图绘制函数是coastlines&#xff0c;即海岸线线条图&#xff0c;这很复合我们的绘图直觉&#xff0c;毕竟陆地和海洋的边缘&#xff0c;是最清晰的地理特征。而在此之上&#xff0c;还可以通过add_feature函…

Java 面试题库

基础篇 面向对象的特征 封装&#xff08;Encapsulation&#xff09;&#xff1a; 封装是指将对象的数据&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;结合在一起&#xff0c;形成一个独立的实体。对象的数据被隐藏在内部&#xff0c;只能通过定义好的接口&…

【嵌入式学习】网络通信基础-项目篇:简单UDP聊天室

源码已在GitHub开源&#xff1a;0clock/LearnEmbed-projects/chat 实现的功能 客户端功能&#xff1a; 上线发送登录的用户名[yes] 发送消息和接收消息[yes] quit退出 服务器端功能&#xff1a; 统计用户上线信息&#xff0c;放入链表中[yes] 接收用户信息并给其他用户发送消…

Windows11 鼠标拖动文件到CMD控制终端窗口无效,无法显示具体文件路径

对于某些用户来说&#xff0c;他们可能会在Windows 11上遇到鼠标拖动文件到CMD控制终端时&#xff0c;无法显示具体文件路径的情况。 系统更新&#xff0c;习惯基础操作无效了&#xff0c;真的有点烦&#xff0c;不会提问就无计可施。 果然善于提问&#xff0c;才有果子吃 问…

架构师之路(十五)计算机网络(网络层协议)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 ARP协议 地址解…

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 …

SpringBoot项目多数据源配置与MyBatis拦截器生效问题解析

在日常项目开发中&#xff0c;由于某些原因&#xff0c;一个服务的数据源可能来自不同的库&#xff0c;比如&#xff1a; 对接提供的中间库&#xff0c;需要查询需要的数据同步数据&#xff0c;需要将一个库的数据同步到另一个库&#xff0c;做为同步工具的服务对接第三方系统…

服务器渲染+自定义模块+mysql操作

1.服务器渲染 A.第一步&#xff0c;导入模块库和第三方库 npm init npm --registry https://registry.npmmirror.com install art-template moment B.第二步&#xff0c;调整html文件 <!DOCTYPE html> <html lang"en"><head><meta charset…