首页 > 编程语言 >C++程序分享--常见算法/编程面试题:(百度笔试题)用 C 语言实现函数 void * memmove

C++程序分享--常见算法/编程面试题:(百度笔试题)用 C 语言实现函数 void * memmove

时间:2024-05-27 16:31:04浏览次数:13  
标签:src 面试题 return memmove -- void dest

关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。
图解《程序员面试常见的十大算法》及代码实现

-------------------------------------正文----------------------------------------

百度笔试题
用 C 语言实现函数 void * memmove(void *dest, const void *src, size_t n)。memmove 函数的功能是拷贝
src 所指的内存内容前 n 个字节到 dest 所指的地址上。
分析:
由于可以把任何类型的指针赋给 void 类型的指针, 这个函数主要是实现各种数据类型的拷贝。

#include <cstring>
 
void* memmove(void* dest, const void* src, size_t n) {
    if (dest == nullptr || src == nullptr) {
        return nullptr;
    }
    
    // 如果内存区域不重叠,则直接使用memcpy
    if (dest < src || static_cast<const char*>(dest) >= static_cast<const char*>(src) + n) {
        return memcpy(dest, src, n);
    }
    
    // 如果内存区域重叠,则从后向前复制
    auto* d = static_cast<char*>(dest) + n - 1;
    auto* s = static_cast<const char*>(src) + n - 1;
    
    while (n--) {
        *d-- = *s--;
    }
    
    return dest;
}
 
// 测试代码
#include <cassert>
 
int main() {
    char buffer[] = "abcdef";
    memmove(buffer + 1, buffer, 3);
    assert(strcmp(buffer, "abcabc") == 0);  // 确保结果正确
    return 0;
}

如果不允许使用memcpy,则可以用类似下面赋值的代码,从前往后复制即可。

感兴趣的同学辛苦 关注/点赞 ,持续分享逻辑、算法、管理、技术、人工智能相关的文章。

博主其它经典原创:《管理心得--如何高效进行跨部门合作》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》,及
C#实例:SQL如何添加数据》,《C#实战分享--爬虫的基础原理及实现》欢迎大家阅读。

标签:src,面试题,return,memmove,--,void,dest
From: https://blog.csdn.net/weixin_60437218/article/details/137786559

相关文章

  • Nginx 配置文件使用指南
    Nginx的配置文件是对其进行各种设置和功能定义的关键。一、配置文件结构一般主要包括全局块、事件块和HTTP块等。二、全局块user:指定运行Nginx进程的用户和组。worker_processes:设置工作进程数量。三、事件块accept_mutex:决定连接处理方式。四、HTTP块server ......
  • 一例APP绕过root检测解密
    一例APP绕过root检测解密前言最近在分析一款app时遇见了root检测,数据包加密,花了时间简单研究了一下,记录下学习的过程。 抛出问题打开app发现提示检测到设备为root设备,闪退。能看到提示,推测应该是java层的检测。拖进jadx发现是加固的。通过frida绕过检测java层常见......
  • 基于FIDO2和USBKEY硬件的SSH认证
    在8.2(最新为8.3)版本中,OpenSSH提供了对FIDO和UAF的支持。从此用户就可以用硬件USBKEY证书进行SSH原生认证。这样可以实现简捷、有效和安全的SSH认证。本文我们就就少一下FIDO2以及OpenSSH对其的支持,并尝试一下基于FIDO2的SSH认证,前提需要一个USBkey设备......
  • 智慧养老大趋势:迎接未来老龄化社会的挑战与机遇
    随着全球人口老龄化的加速,智慧养老已成为应对这一挑战的重要途径。智慧养老是指利用现代信息技术,特别是物联网、大数据、云计算和人工智能等技术手段,为老年人提供个性化、智能化和便捷化的养老服务。本文将探讨智慧养老的大趋势,分析其背后的驱动因素,并展望智慧养老的未来发展......
  • 解密 Alpha 勒索软件
    Alpha勒索软件很容易与ALPHV勒索软件混淆,但其实这是两个不同的勒索软件团伙。近期,Alpha勒索软件团伙在暗网上建立了数据披露网站,并且对外公开了6个受害者。通常来说,勒索软件运营者在启动数据披露网站前会保持攻击态势。一旦成功入侵了部分受害者(这通常需要几个月的时间),攻......
  • C++类和对象(三)
    一、构造函数的进阶1.1构造函数整体赋值        在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。classDate{public:Date(intyear,intmonth,intday){_year=year;_month=month;_day=day;}private:int_year;......
  • app上架国内应用商城合规检测、隐私合规检测
    1.工具准备camile代码(python)gitclonehttps://github.com/zhengjim/camille.git模拟器(夜神模拟器/Mumu模拟器)mumu模擬器:127.0.0.1:7555夜神模擬器:127.0.0.1:62001FridaFirda是一款易用的跨平Hook工具,Java层到Native层的Hook无所不能,是一种动态的插桩工......
  • 类中方法作为装饰器装饰类中方法
    classDataBase:""""""def__init__(self,setting:Dict=None):""""""self.process_count=0@staticmethoddefcounter_decorator(func:Callable)......
  • Centos升级glibc2.28遇到的问题
    升级glibc查询glibc版本:strings/lib64/libc.so.6|grepGLIBC升级glibc2.28wgethttps://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gztar-xzvfglibc-2.28.tar.gzcdglibc-2.28创建临时文件mkdirbuild&&cdbuild../configure--prefix=/usr--disable-profile--ena......
  • VUE学习笔记(四)
    通过子组件实例实现对话框的打开AddCategory.vue页面里调整dialogvue里按钮事件<divclass="dialog-footer"><el-button@click="state.dialogVisible=false">Cancel</el-button><el-buttontype="primary"......