[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/viclab/algorithm/master/string/strops.c [Back]  [Original]

//
//Wed Aug 13 01:06:50 PDT 2014
#include 
#include 
#include 

//strcpy
char* mystrcpy(char* strDes, const char* strSrc)
{
    if (strDes == strSrc)
        return strDes;
    assert(strDes != NULL && strSrc != NULL);
    char* des = strDes;
    while ((*strDes++ = *strSrc++) != '\0');
    return strDes;
}

//strncpy
char* mystrncpy(char *dst, const char *src, size_t size)
{
    assert((src != NULL) && (dst != NULL));
    char *add = dst;
    //int i = 0; // 
    while ((*dst++ = *src++)!='\0' && size-- > 0)
    {
        /*do nothing*/
    }
    if (*(--dst) != '\0') //'\0'
    {
        *dst = '\0';
    }
    return add;
}

//char* mystrncpy(char* dest, const char* src, int len)
//{
//    assert(dest!=NULL && src!=NULL);
//
//    char* temp=dest;
//    //int i=0;
//
//    //while(i++ < len  && (*temp++ = *src++)!='\0');
//    while(len-->0  && (*temp++ = *src++)!='\0');    //*temp = '\0',
//
//    if (*temp != '\0')
//        *temp='\0';
//
//    return dest;
//}

//char* strncpy(char* strDes, const char* strSrc, size_t n)
//{
//    assert(strDes != NULL && strSrc != NULL && n > 0);
//    if (strDes == strSrc)
//        return strDes;
//    char *des = strDes;
//    for (; strSrc && n > 0; ++des, ++strSrc, --n)
//        *des = *strSrc;
//    for (; n > 0; --n)
//        *des = '\0';
//    return strDes;
//}

//Cstrcpy
//
char* mystrcpy2(char *s1, const char *s2)
{
    char *s;
    for (s = s1; (*s++ = *s2++) != '\0'; )
        ;
    return s1;
}

//Cstrncpy
//
char* mystrncpy2(char *s1, const char *s2, size_t n)
{
    char* s;
    for (s = s1; 0 < n && *s2 != '\0'; --n)
        *s++ = *s2++;
    for (; 0 < n; --n)
        *s++ = '\0';
    return s1;
}

//
void* mymemcpy(void *des, void *src, size_t n)
{
    assert(des != NULL && src != NULL && n > 0);
    char *pdes = (char*) des;
    const char *psrc = (const char*) src;
    while (n-- > 0)
    {
        *pdes++ = *psrc++;
    }
    return des;
}

//memmove
void* mymemcpy2(void *des, void *src, size_t n)
{
    assert(des != NULL && src != NULL && n > 0);
    if ( src < des && (char*)src + n > (char*)des)
    {
        char *pdes = (char*)des + n - 1;
        const char *psrc = (const char*)src + n - 1;
        while (n-- > 0)
        {
            *pdes-- = *psrc--;
        }
    }
    else
    {
        char *pdes = (char*)des;
        const char *psrc = (const char*)src;
        while (n-- > 0)
        {
            *pdes++ = *psrc++;
        }
    }
    return des;
}

int main()
{
    char str1[10];
    char str2[10];
    //mystrcpy(str1, "hello");
    mystrncpy(str1, "hello", 3);
    //mystrcpy2(str2, "World");
    //mystrncpy2(str2, "World", 2000000);
    strncpy(str2, "hello", 3);
    
    printf("str1=%s\n", str1);
    printf("str2=%s\n", str2);

    return 0;
}
   

Web Proxy Viewer  |  New URL  |  Original Page