学习笔记——strlen、strcpy、memcpy的c语言实现,不调用库函数

/*
 *Magicman
 *myStrcpy.c
 *不用库函数,实现字符串拷贝函数(strcpy)
*/
#include <stdio.h>
#include <assert.h>

char *myStrcpy( char *strDest, const char *strSrc )
{
    //对源地址和目的地址加非0 断言
    assert( (strDest != NULL) && (strSrc != NULL) );
   
    //为了实现链式操作,将目的地址返回
    char *address = strDest;
   
    //循环,拷贝字符串
    while( (*strDest++ = *strSrc++) != '/0' );
   
    return address;
}

int main(int argc, char argv[])
{
    char str1[] = "Test myStrcpy!";
    char str2[20] = "";
    char *p = NULL;

    myStrcpy(str2, str1);

    printf(str2);

    printf("/n");

    myStrcpy(p,str1);

    return 0;
}


/*
 *Magicman
 *myStrlen
 *不用库函数,求一个字符串的长度
*/
#include <stdio.h>
#include <assert.h>

int myStrlen(const char *str)
{
    assert(str != NULL); //断言

    int len = 0;

    while (*str++ != '/0')
    {
        len++;
    }

    return len;
}

int main(int argc, char *argv[])
{
    char str1[] = "Testing myStrlen!";

    printf("str1 = %s/n", str1);

    printf("len = %d/n", myStrlen(str1));
   
    return 0;
}


/*
 *Magicman
 *myMemcpy.c
 *不调用库函数,实现内存拷贝
*/

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

void *myMemcpy(void *dest, const void *src, int len)
{
    assert((dest != NULL) && (src != NULL) && (len >= 0));

    if (dest == src)
    {
        return dest;
    }

    while (len-- > 0)
    {
        *(char *)dest++ = *(char *)src++;
    }

    return dest;
}

int main(int argc, char argv[])
{
    char str[20] = "Testing myMemory!";
    char pstr[20] = "";
    char *pp = str;
    int ia[10] = {1,2,3,4,5,6,7,8,9,10};
    int ib[10] = {};
    int *ip = NULL;

    myMemcpy((void *)pstr, (void *)str, sizeof(str));

    printf("%s/n", pstr);

    printf("%s/n", myMemcpy((void *)pp, (void *)str, 20));

    myMemcpy((void *)ib, (void *)ia, 5*sizeof(int));

    for (ip = ib; ip < ib + 10; ip++)
    {
        printf("%d  ", *ip);
    }

    printf("/n");
   
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值