zoukankan      html  css  js  c++  java
  • C语言实现strcpy

    strcpy.h:

     1 #ifndef STRCPY_H
     2 #define STRCPY_H
     3 
     4 #include <stdio.h>
     5 
     6 char *cat_strcpy(char *dst, const char *src) {
     7     if (NULL == src || NULL == src)
     8         return NULL;
     9 
    10     char *s = (char *)src, *d = dst;
    11 
    12     while ((*d++ = *s++) != '') {
    13         // do nothing
    14     }
    15     *d = '';
    16 
    17     return dst;
    18 }
    19 
    20 #endif

    main:

     1
     2 #include "strcpy.h"
     3 
     4 
     5 void test_strcpy();
     6 
     7 int main() {
     8     test_strcpy();
     9 
    10     return 0;
    11 }
    12 
    13 
    14 void test_strcpy() {
    15     char *src = "test_strcpy";
    16     char dest[20] = { 0 };
    17     cat_strcpy(dest, src);
    18 
    19     printf("%s
    ", dest);
    20 }

    strcpy(str1,str2)函数能够将str2中的内容复制到str1中,为什么还需要函数返回值应该是方便实现链式表达式,比如:

    int length = strlen(strcpy(str1,str2));

     ref:http://www.cnblogs.com/chenyg32/p/3739564.html

    拓展:假如考虑dst和src内存重叠的情况,strcpy该怎么实现

    char s[10]="hello";

    strcpy(s, s+1); //应返回ello,

    //strcpy(s+1, s); //应返回hhello,但实际会报错,因为dst与src重叠了,把''覆盖了

    所谓重叠,就是src未处理的部分已经被dst给覆盖了,只有一种情况:src<=dst<=src+strlen(src)

    C函数memcpy自带内存重叠检测功能,下面给出memcpy的实现my_memcpy。

    复制代码
    char * strcpy(char *dst,const char *src)
    {
        assert(dst != NULL && src != NULL);
    
        char *ret = dst;
    
        my_memcpy(dst, src, strlen(src)+1);
    
        return ret;
    }
    复制代码

     

    my_memcpy的实现如下:

  • 相关阅读:
    【MYSQL】SQL 的join 区别
    【Django】Django model与数据库操作对应关系(转)
    【Mysql】复制表结构+数据(转)
    【Django】Python web开发:几个模板系统的性能对比(转)
    【Mysql】Mysql关键字
    【Mysql】MySQL与Oracle的大小写问题
    Linux常用操作
    执行程序的两种方式
    Django框架的安装与使用
    web介绍
  • 原文地址:https://www.cnblogs.com/lingshaohu/p/3961132.html
Copyright © 2011-2022 走看看