模拟实现strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove

来源:互联网 发布:php在线支付源码 编辑:程序博客网 时间:2024/05/17 02:44
#include<stdio.h>#include<windows.h>#include<assert.h>#include <memory.h>char *my_strcpy(char *dst, const char *src){    assert(dst);    assert(src);    char *ret = dst;    while (*dst++ = *src++)    {        ;    }    return ret;}char *my_strcat(char *dst, const char *src){    assert(dst);    assert(src);    char *ret = dst;    while (*dst != '\0')    {        dst++;    }    dst = dst;    while (*dst++ = *src++)    {        ;    }    return ret;}int my_strlen(const char *p){    assert(p);    int count = 0;    while (*p++ != '\0')    {        count++;    }    return count;}char *my_strstr(const char *dst, const char *src){    assert(dst);    assert(src);    const char *pdst = dst;    const char*psrc = src;    int len = my_strlen(psrc);    while (my_strlen(dst) < my_strlen(src))    {        break;    }    while (my_strlen(pdst) > len)    {        while (*dst != *psrc)        {            dst++;        }        psrc = src;        pdst = dst;        while (*dst == *psrc)        {            dst++,psrc++;        }        if (*psrc == '\0')        {            return pdst;        }    }    return NULL;}char *my_strchr(char *dst, const char a){    assert(dst);    while (a != *dst)    {        dst++;    }    return dst;}int my_strcmp(const char *dst, const char *src){    assert(dst);    assert(src);    int count = 0;    int len = my_strlen(dst);    while (my_strlen(dst) > len)    {        return -1;    }    while (my_strlen(dst) < len)    {        break;    }    while ((*dst == *src) && (*dst != '\0'))    {        dst++;        src++;        count++;    }    if (count == len)    {        return 0;    }    return 1;}void *my_memcpy(void *dst,const void *src,int size){    assert(dst);    assert(src);    char *pdst = (char *)dst;    char *psrc = (char *)src;    char *p = pdst;    while ((pdst > psrc) | (pdst < psrc))    {        p = "因存在内存覆盖问题,请使用my_memmove函数";        return p;    }    while (size--)    {        *pdst++ = *psrc++;    }    return p;}void *my_memmove(void *dst, const void *src, int size){    assert(dst);    assert(src);    char *pdst = (char *)dst;    char *psrc = (char *)src;    char *p = pdst;    if (pdst>psrc)    {        pdst = pdst + size - 1;        psrc = psrc + size - 1;        while (size--)        {            *pdst-- = *psrc--;        }    }    if (pdst<psrc)    {        while (size--)        {            *pdst++ = *psrc++;        }    }    return p;}
阅读全文
0 0