模拟实现字符串和内存操作函数(二)目录:

  • strncpy
  • strncat
  • strncmp
  • strcmp
  • memcpy
  • memmove

strncpy

char* strncpy(char* dst, const char* src, size_t num)

  • strncpy表示把src所指向的字符串中以src地址开始的前n个字节复制到dst所指的数组中,并返回被复制后的dst。
  • strncpy与ctrcpy的区别就是可以控制拷贝的字符个数,下面的strncmp和strncat同理,我们只需要按照传进来的num执行对应次数的循环即可
char* my_strncpy(char* dst, const char* src, size_t num)
{size_t i;char* dst1 = dst;for (i = 0; i < num; i++){*dst1++ = *src++;}return dst;
}

strncat

char* my_strncat(char* dst, const char* src, size_t num)

  • strncat把src所指字符串的前n个字符添加到dst所指字符串的结尾处,并覆盖dst所指字符串结尾的’\0’,从而实现字符串的连接。
char* my_strncat(char* dst, const char* src, size_t num)
{char* dst1 = dst;size_t i;while (*dst1){dst1++;}for (i = 0; i < num; i++){if(*src)*dst1++ = *src++ ;}*dst1 = '\0';return dst;
}

strncmp

int my_strncmp(const char* dst, const char* src, int num)

int my_strncmp(const char* dst, const char* src, int num)
{assert(dst && src);unsigned char* dst1 = (unsigned char*)dst;unsigned char* src1 = (unsigned char*)src;while(*dst1 && *src1 && num) {if (*dst1 < *src1)return -1;else if (*dst1 > *src1)return 1;else{dst1++;src1++;num--;}}if ('\0' != *dst1 && '\0' == *src1)return 1;if ('\0' == *dst1 && '\0' != *src1)return -1;else return 0;
}

memcpy

void* my_memcpy(void* dst, const void* src, size_t num)

  • 从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中。
  • 这个函数在遇到’\0’的时候不会停下来
  • 如果src和dst有任何的重叠,复制的结果都是未定义的
  • 与strcpy的区别就是可以拷贝所有类型
void* my_memcpy(void* dst, const void* src, size_t num)
{assert(dst && src);char* dst1 = (char*)dst;char* src1 = (char*)src;//强转原因:因为需要一个字节一个字节拷贝,而只有字符型的大小为一个字节size_t i;for (i = 0; i < num; i++){dst1[i] = src1[i];}return dst;
}

memmove

void* my_memmove(void* dst, const void* src, size_t num)

  • 由src所指内存区域复制count个字节到dest所指内存区域。
  • 和memcpy的区别就是memmove函数处理的源内存块和目标内存块是可以重叠的
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理
  • 为防止内存重叠,当产生前重叠时从前往后拷贝,当产生后重叠时从后往前拷贝,其他状况随意
void* my_memmove(void* dst, const void* src, size_t num)
{assert(dst && src);char* dst1 = (char*)dst;char* src1 = (char*)src;size_t i;int j;if (dst1 < src1 &&){for (i = 0; i < num; i++){dst1[i] = src1[i];}}//前重叠从前往后拷贝else{for (j = num - 1; j >= 0; j--){dst1[j] = src1[j];}}//后重叠从后往前拷贝return dst;
}

C语言程序设计 | 模拟实现内存操作函数:strncpy, strncat, strncmp, memcpy, memmove相关推荐

  1. C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr

    模拟实现字符串和内存操作函数(一)目录: strlen strcpy strcat strcmp strstr strchr strlen size_t strlen(const char* str) ...

  2. 【C】字符串库函数及其模拟实现(中)—— strncpy | strncat | strncmp

    本文重点 4.strncpy 5.strncat 6.strncmp 正文开始@边通书

  3. C语言--内存操作函数memmove

    文章目录 一.C语言--内存操作函数memmove 1.1 memmove函数介绍 1.2 memmove使用示例 二.模拟实现memmove函数 一.C语言–内存操作函数memmove 1.1 me ...

  4. C语言——常见的字符串函数+内存操作函数的介绍及实现

    文章目录 前言 一.字符串函数 1.求字符串长度 strlen 2.长度不受限制的字符串函数strcpy.strcat.strcmp 字符串拷贝 strcpy 字符串追加拷贝 strcat 字符串比较 ...

  5. 字符串转内存c语言,【一起学C】C语言面试题必考:字符串操作函数,内存操作函数实现...

    本帖最后由 奉聪 于 2017-1-25 14:54 编辑 *******前言******* 我数一下,我发了几个帖子,1.2.3? 哈哈哈,没几个哈,感谢吾爱,让我学到了很多,乐于分享,共同进步! ...

  6. c语言程序设计p36答案,C语言程序设计模拟试题A附答案

    <C语言程序设计模拟试题A附答案>由会员分享,可在线阅读,更多相关<C语言程序设计模拟试题A附答案(20页珍藏版)>请在人人文库网上搜索. 1.单项选择题(每题2分,共20分) ...

  7. c语言程序设计函数6,C语言程序设计》第6章函数-XiamenUniversity.PDF

    厦门大学非计算机专业本科生公共课 (2012-2013第2学期) <C语言程序设计> 第6章 函数 林子雨 厦门大学计算机科学系 E-mail: ziyulin@ 个人主页:/linziy ...

  8. 无忧考吧2017二级java_二级Java模拟软件|无忧考吧二级Java语言程序设计模拟软件下载 v2017.03官方版 - 121下载站...

    无忧考吧二级Java语言程序设计模拟软件是专为准备考试二级JAVA语言的朋友打造的一款在线模拟软件,二级JAVA语言的考试理论上是非常简单的, 大家只需要掌握基本的语法和一些简单的编程就可能了,这款软 ...

  9. c语言程序设计移动字母,C语言程序设计模拟试题二(含答案)

    C语言程序设计模拟试题二(含答案) 1.下列电子邮件地址中正确的是(其中□表示空格) A) Malin&http://www.doczj.com/doc/2969157fa26925c52cc ...

最新文章

  1. 时间和空间复杂度概述【Java _demo版】
  2. CRM公海自动回收规则
  3. matlab impyramid,图像 – Matlab impyramid问题
  4. linux的i o模型,I/O模型的分类及简介
  5. Docker 从入门到掉坑
  6. spss文件 服务器登录,spss连接远程服务器
  7. C语言程序设计期末卷子,C语言程序设计试题1
  8. 惠普打印机故障代码_惠普打印机故障代码
  9. Lena,Pepper等图像,图像处理必备资料。
  10. android计算器如何保存记录,计算器历史记录怎么看
  11. 人工智能NLP在金融领域的发展趋势和实践经验
  12. 随风摇曳的她——美蕨(matlab实现)
  13. 微信小程序 开发者工具和真机调试都能正常请求访问,线上不能登录请求问题
  14. 微型计算机延时,延迟时间
  15. CentOS安装NodeBB
  16. 计算机网络dce是什么意思,DTE与DCE的解释
  17. js怎么解析json格式字符串
  18. 二叉树最强总结(python实现)
  19. fiddler拦截手机端请求
  20. jmp怎么做合并的箱线图_如何在JMP中给箱线图(Box Plot)快速着色

热门文章

  1. if语句和缩进部分是一个完整的代码块
  2. plsql(轻量版)-存储函数存储过程
  3. c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...
  4. b站2020用户画像_B站2020年度动画大选来袭!论引战,还是要看B站!
  5. 搜索专题:bfs和dfs
  6. 200806C阶段一结构体
  7. 常用LINQ关键字用法汇总
  8. NIO - Selector源码分析
  9. 模拟键盘 键盘虚拟代码
  10. 初学Android,字符串,数字,尺寸,数组资源(十二)