strcpy函数的实现,考虑内存重叠情况
来源:互联网 发布:木桶原理与系统优化 编辑:程序博客网 时间:2024/06/04 01:10
这里贴出strcpy函数的简单实现,其中考虑内存重叠情况的是函数是mystrcpy2,但是单传递内存重叠的实参的时候运行总是出错,网上的代码基本都是这样实现的,不知道别人运行的时候有没有出错
#include <string.h>#include <stdio.h>#include <stdlib.h>#include <assert.h>//这种实现如果遇到内存重叠就会出错,如mystrcpy(Src+1,Src);'\0'由于被覆盖导致出现死循环char *mystrcpy(char *strDest, const char *strSrc){assert((strDest != NULL) && (strSrc != NULL));char * address = strDest;while ((*strDest++ = *strSrc++) != '\0');return address;}//考虑内存重叠的字符串拷贝函数char *mystrcpy2(char *strDest, const char *strSrc){assert((strDest != NULL) && (strSrc != NULL));char *ret = strDest;char *d, *s;int size = 0;d = (char *)strDest;s = (char *)strSrc;size = strlen(strSrc) + 1;printf("size = %d\n", size);if (strDest >= strSrc && strDest <= strSrc + size) {d += size - 1;s += size - 1;while (size--){*d-- = *s--;//vs2017 win10 运行到此处有问题但不提示错误直接退出,vs2010 win7提示内存冲突}}else {while (size--)*strDest++ = *strSrc++;}return ret;}int main(void){char *Src = "abcde";char *Dest2 = Src + 2;printf("%s\n", Src);mystrcpy2(Dest2, Src);printf("%s\n", Dest2);system("pause");return 0;}
阅读全文
0 0
- strcpy函数的实现,考虑内存重叠情况
- 考虑了内存重叠的字符串拷贝函数strcpy
- strcpy函数的实现(注意内存重叠)
- 功能函数strcpy的实现(考虑内存覆盖)
- Strcpy,memcpy函数的内存重叠
- memmove函数如何考虑内存重叠的
- 【C语言】模拟实现memmove函数(考虑内存重叠)
- strcpy考虑重叠
- strcpy memcpy 完整代码,包括内存块重叠的的情况
- C语言 编写程序实现内存拷贝,不考虑内存重叠。不允许调用memcpy函数
- strcpy,memcpy,memmove的内存重叠
- memcpy的实现,考虑重叠地址空间。
- 手动实现memcpy涉及内存重叠与不重叠情况
- 内存重叠之strcpy&memmove
- strcpy函数的实现
- strcpy函数的实现
- strcpy函数的实现
- strcpy函数的实现
- 计算机网络学习笔记一
- SDIO驱动总结
- localStorage与sessionStorage
- iOS开发—处理多个网络请求并发的情况
- 关于iis服务在本地的创建
- strcpy函数的实现,考虑内存重叠情况
- CSDN博客换新颜
- [P1979]华容道
- HDU 1232-畅通工程(并查集)
- Linux accept()/epoll_wait()惊群问题与解决方案
- 深度学习调参技巧
- Go 函数 学习笔记
- HDU6102(树状数组 + 容斥 + 离线处理)
- adb环境变量的配置