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 }
  • 相关阅读:
    海选女主角
    发工资咯:)
    绝对值排序
    数列有序!
    母牛的故事
    一文看懂外汇风险准备金率调整为 20%的含义
    1080i减少带宽
    为什么要采用隔行扫描?
    720P、1080P、4K是什么意思?
    VBR一次編碼 v.s 二次編碼(VBR 1-pass vs 2-pass)
  • 原文地址:https://www.cnblogs.com/masterlibin/p/4746284.html
Copyright © 2011-2022 走看看