惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
罗磊的独立博客
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园 - 叶小钗
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
B
Blog
V
Visual Studio Blog
雷峰网
雷峰网
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 中土

Linux 命令缩写部分解释 Eclipse RCP 的一些有用的资源及应用案例 分析Linux和windows动态库 C/C++中的函数参数传递机制(zz) LDD3 笔记: 第3章 字符设备的驱动 2008年看书计划 H.264学习建议(zz) - 中土 - 博客园 几种常用的视频接口(端子) U-boot 移植到FS2410 NandFlash和NorFlash的区别 A simple tourial for Linux 2.6.24 kernel module Linux basic use Kernel resource list Linux2.6 驱动设计―从 2.4.x 到 2.6.x Linux 2.6.x 内核模块入门(LKM) C++中无处不在的临时变量 类中引用成员的初始化 C++初始化与赋值 C异常处理实现: setjmp和longjmp
strcpy和memcpy的标准实现
中土 · 2009-08-01 · via 博客园 - 中土

//============================================================================
// Name        : HelloWorld.cpp
// Author      : chio <chio.yang@gmail.com>
// Version     : ver.1.0.0
// Copyright   : Suprasoft Inc,.
// Description : TODO
//============================================================================

#include <iostream>
#include <string.h>
#include <cassert>
using namespace std;char * strcpy(char *dst, const char *src) {
    assert(src != NULL && dst != NULL);
    
char *ret = dst;
    
while((*dst++ = *src++!= '\0') ;
    
return ret;
}void * memcpy(void *dst, const void *src, size_t len) {
    assert(src != NULL && dst != NULL);
    
void *ret = dst;
    
int i = len;
    
//防重叠
    if(src < dst) {
        
char *csrc = (char *)src;
        
char *cdst = (char *)dst;
        
while(i--) {
            
*cdst++ = *csrc++;
        }
    } else {
        
char *csrc = (char *)src + len - 1;
        
char *cdst = (char *)dst + len - 1;
        
while(i--) {
            
*cdst-- = *csrc--;
        }
    }return ret;
}int main() {
    
char *src = "hello world";
       
char *dst = new char[0];
    cout << strcpy(dst, src) << endl;
    
void *memsrc = (void *)"hello";
    
char memdst[6];
    memdst[5= '\0';
    cout << (char *)memcpy(memdst, memsrc, 5<< endl;return 0;
}