zoukankan      html  css  js  c++  java
  • strcpy的实现

     1 //
     2 //  Strcpy.c
     3 //  libin
     4 //
     5 //  Created by 李宾 on 15/8/20.
     6 //  Copyright (c) 2015年 李宾. All rights reserved.
     7 //
     8 
     9 #include <stdio.h>
    10 #include <assert.h>
    11 #include <string.h>
    12 /***********************************************不考虑覆盖*****************************************/
    13 char * Strcpy1(char *dst, const char *src)//const 在*号左边,指的是指针所指向的内容为常量,不允许修改。
    14 {
    15     assert(dst != NULL && src != NULL);   //判断指针是否为空,条件为假,中断程序。
    16    
    17     char *ret = dst;
    18     
    19     while((*dst++ = *src++)!='');
    20     
    21     return ret;                        //返回dst是为了支持链式表达式。例如:int l=strlen(strcpy(strA,strB));
    22 }
    23 
    24 
    25 
    26 /**********************************************考虑内存重叠******************************************/
    27 char *my_memcpy(char *dst, const char* src, int len)
    28 {
    29     char * ret = dst;
    30     int n = len + 1;
    31     if (dst>=src && dst <= src+len)
    32     {
    33         dst = dst + len;
    34         src = src + len;
    35         while (n --)
    36         {
    37             *dst-- = *src--;
    38         }
    39     }
    40     else
    41         while (n--)
    42         {
    43             *dst++ = *src++;
    44         }
    45     return ret;
    46         
    47 }
    48 
    49 char * Strcpy2(char *dst, const char *src)
    50 {
    51     assert(dst!= NULL && src != NULL);
    52     
    53     char *ret = dst;
    54     
    55     my_memcpy(dst, src, (int)strlen(src));
    56     
    57     return ret;
    58 }
    59 
    60 
    61 
    62 int main()
    63 {
    64     //char *a = "hello";                //含义是先新建一个字符串,内容是abcd 然后str1是一个头指针,指向这个串.
    65     char a[6] = {'a','b','c','d','e'};  //但是这个新建串是作为const存在的,并不是一个可以编辑的变量
    66     char b[6] = {'l','o','v','e','i'}; //因此,一旦你想更改其中的值,程序就会挂掉.
    67     char *c;
    68     //a = Strcpy1(a,b);   数组名是指针常量,不能赋值。
    69     c = Strcpy1(a, b);
    70     puts(c);
    71     
    72 }
  • 相关阅读:
    [背包]JZOJ 3232 【佛山市选2013】排列
    内核空间、用户空间、虚拟地址
    进程与线程的概念
    Python中字符串颜色
    socket编程
    模块与包
    常用模块
    面向对象进阶
    面向对象编程
    函数式编程
  • 原文地址:https://www.cnblogs.com/masterlibin/p/4746284.html
Copyright © 2011-2022 走看看