strcpy strlen memcpy等的函数实现
#include <assert.h> 
#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 
 
char *StrCpy(char *dest, const char *src) 
{ 
    assert((dest != NULL) && (src != NULL)); 
     char *str = dest; 
     while ((*dest ++ = *src ++) != '\0'); 
     return str; 
} 
 
int Strlen(const char *str) 
{ 
     assert((str != NULL)); 
     int len = 0; 
     while (*str ++) 
     { 
          len++; 
     } 
     return len; 
} 
 
int StrCmp(const char *str1, const char *str2) 
{ 
     assert((str1 != NULL) && (str2 != NULL)); 
     int rt = 0; 
     while ( !(rt = *(unsigned char *)str1 - *(unsigned char*)str2 ) &&  *str2) 
     { 
         str1 ++;  
         str2 ++; 
     } 
     if (rt > 0)  
     { 
         rt = 1; 
     } 
     else if (rt < 0) 
     { 
         rt = -1; 
     } 
     return rt; 
} 
 
//为了解决内存重叠的现象  
void *MemCpy(void *dst, const void *src, size_t count) 
{ 
     char *pdst = static_cast<char *>(dst); 
     const char *psrc = static_cast<const char *>(src); 
      
     if (pdst > psrc && pdst < psrc + count) 
     { 
           for (int i = count - 1; i >= 0; i--) 
           { 
                pdst[i] = psrc[i]; 
           } 
     }  
     else 
     { 
           for (int i = 0; i < count; i++) 
           { 
                pdst[i] = psrc[i]; 
           } 
     } 
     return dst; 
}  
 
// memcpy 实现源码 
void * __cdecl memcpy ( 
        void * dst, 
        const void * src, 
        size_t count 
        ) 
{ 
        void * ret = dst; 
 
        while (count--) { 
                *(char *)dst = *(char *)src; 
                dst = (char *)dst + 1; 
                src = (char *)src + 1; 
        } 
 
        return(ret); 
}  
 
int main() 
{ 
     char  str2[100] = "abcd"; 
     char *str1 = (char *)malloc(100); 
     str1= str2 + 2;  
     //考虑了内存重叠  
     MemCpy(str1, str2, 5); 
     printf("调用MemCpy后str1的内容:     %s\n", str1);
strcpy strlen memcpy等的函数实现的更多相关文章
- sprintf、strcpy 及 memcpy 函数区别
		
这些函数的区别在于 实现功能 以及 操作对象 不同.strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能. sprintf 函数操作的对象 不限于字符串 :虽然 ...
 - strcpy和memcpy,memmove函数的区别
		
strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制 ...
 - strcpy vs memcpy
		
[本文连接] http://www.cnblogs.com/hellogiser/p/strcpy_vs_memcpy.html [分析] strcpy和memcpy都是标准C库函数,它们有下面的特点 ...
 - strcpy、memcpy和memset之间的区别
		
今天刷题时遇到了这个问题,记录一下. strcpy比较简单,就是拷贝字符串,遇到'\0'时结束拷贝. memcpy用来做内存拷贝,可以拷贝任何数据类型的对象并指定拷贝数据的长度:char a[100] ...
 - strcpy和memcpy的区别(转载)
		
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
 - 【转】 strcpy和memcpy的区别
		
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
 - 关于strcpy和memcpy
		
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符.已知strcpy函 ...
 - strcpy和memcpy的区别
		
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
 - strcpy与memcpy的区别
		
strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制 ...
 
随机推荐
- struts2:字段校验和非字段校验代码示例
			
一.为什么要使用struts2的validate验证框架 :使用struts2的验证框架,能够提高客户端提交的数据的安全性.通过验证,确保保存进数据库的信息是正确的 二.使用struts2的valid ...
 - eclipse设置汉化
			
1. 打开eclipse->help->install new software 2. 打开http://www.eclipse.org/babel/downloads.php,,,找到相 ...
 - Hash工具下载地址
			
因为经常要在非常用电脑使用,这里放一个链接,方便下载: http://files.cnblogs.com/files/cxun/Hash.zip HASH计算工具,可计算MD5.SHA-1.CRC32 ...
 - 基于配置文件(xml)的S2S3H3搭建
			
本次环境选择:JDK1.6+MySQL数据库+C3P0连接池+(struts2,spring3,hibernate3) 首先,创建WEB工程 然后倒入相关jar包(maven项目,在pom.xml中导 ...
 - C++多级指针与多维数组详细介绍
			
多级指针的概念 多级指针可对应于多维数组,这种指针变量中存的是另一个指针变量的地址,其说明如下: int val=10; int *ptr=&val; int **pptr= ...
 - ES6里箭头函数的陷阱
			
ECMAScript 6新增了箭头函数 原来的匿名函数 function(){},现在可以简化成()=>{} 看起来高大上,像C#什么的语法. 但是箭头函数的this对象,不能更改,总是指向函数 ...
 - AngularJs--angular-pagination可复用的分页指令
			
1.angular-pagination 是基于angular 编写的可复用分页指令 安装 克隆项目到本地: git clone https://github.com/febobo/angular-p ...
 - WebBrowser内核指定
			
一.背景 这几天在维护公司的一个项目,嗯…到现在七八年没人动过了(也是老古董了),都说N年前的代码碰不得 处处是坑 不能挖坑还得一步一步的填坑,恰好今天就填了一坑 此处作为记录 供以后翻阅,对代码除了 ...
 - JAG Summer 2012 Day 4 C Connect
			
状压dp,由于枚举两维状态会GG,所以只枚举当前位置前m个的状态,就是这个样子大概= =: 呆马: #include <iostream> #include <cstdio> ...
 - OC-01 编译链接的作用
			
编译:检测代码的语法合法性,随后生成.o文件. 链接:把项目中所有的.out合并,生成一个可执行文件. OC编译连接过程 .m---->.o---->.out . 检测源文件的语法合法性 ...