实现 strcpy 函数
来源:互联网 发布:按键精灵数组赋值 编辑:程序博客网 时间:2024/06/17 04:50
要考虑拷贝时内存重叠的情况:
#include <iostream>#include <string.h>#include <assert.h>using namespace std;char *my_strcpy(char *dst, const char *src){ assert(dst != NULL); assert(src != NULL); char *ret = dst; memcpy(dst, src, strlen(src) + 1); return ret;}int main(){ char src[] = "abcd"; char* dest = src + 1; my_strcpy(dest, src); cout<<dest<<endl; return 0;}
输出:
[liboyang@database74 test]$ g++ test.cpp -std=c++11[liboyang@database74 test]$ ./a.out abcd
memcpy 函数实现时考虑到了内存重叠的情况,可以完成指定大小的内存拷贝,这里仅粘帖 memcpy 函数的实现:
void * my_memcpy(void *dst, const void *src, unsigned int count){ assert(dst); assert(src); void * ret = dst; // 源地址和目的地址不重叠,低字节向高字节拷贝 if (dst <= src || (char *)dst >= ((char *)src + count)) { while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } // 源地址和目的地址重叠,高字节向低字节拷贝 else { dst = (char *)dst + count - 1; src = (char *)src + count - 1; while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst - 1; src = (char *)src - 1; } } return ret;}
两者结合才是 strcpy 函数的真正实现:
#include <iostream>#include <string.h>#include <assert.h>using namespace std;void * my_memcpy(void *dst, const void *src, unsigned int count){ assert(dst); assert(src); void * ret = dst; // 源地址和目的地址不重叠,低字节向高字节拷贝 if (dst <= src || (char *)dst >= ((char *)src + count)) { while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } } // 源地址和目的地址重叠,高字节向低字节拷贝 else { dst = (char *)dst + count - 1; src = (char *)src + count - 1; while(count--) { *(char *)dst = *(char *)src; dst = (char *)dst - 1; src = (char *)src - 1; } } return ret;}char *my_strcpy(char *dst, const char *src){ assert(dst != NULL); assert(src != NULL); char *ret = dst; my_memcpy(dst, src, strlen(src) + 1); return ret;}int main(){ char src[] = "abcd"; char* dest = src + 1; my_strcpy(dest, src); cout<<dest<<endl; return 0;}
输出:
[liboyang@database74 test]$ g++ test.cpp -std=c++11[liboyang@database74 test]$ ./a.out abcd
阅读全文
0 0
- strcpy函数的实现
- strcpy函数实现
- 实现strcpy函数(转)
- strcpy函数的实现
- 实现strcpy()函数
- strcpy函数的实现
- strcpy函数实现
- strcpy函数的实现
- strcpy函数实现
- c实现strcpy函数
- strcpy() 函数 标准实现
- 实现strcpy函数
- C++ - 实现strcpy函数
- strcpy函数的实现
- strcpy函数实现
- 编程实现strcpy函数
- 编程实现strcpy函数
- strcpy函数的实现
- [深入浅出Cocoa]iOS网络编程之Socket
- hibernate一对多关系映射
- java字符串与整数之间的互相转换
- Xcode 下删除Provisioning Profiles文件
- Python之Requests模块使用详解
- 实现 strcpy 函数
- Chrome浏览器所有页面全部崩溃!(解决办法)
- Matlab 读写yuv文件
- eclipse SVN插件 subclipse 同步出现 E175002 E200007错误解决办法
- iOS程序性能优化
- 汇编--学习笔记(十五)-总复习
- 仿网易云音乐MV的webapp
- 【尖端干货】星域CDN极速高清技术详解
- PHP 扩展开发(一)