内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

【C語言】字符串操作函數(shù)及內(nèi)存拷貝函數(shù)歸總-創(chuàng)新互聯(lián)

今天在這里把零散的一些常用的字符串操作函數(shù)和內(nèi)存拷貝函數(shù)進(jìn)行一下歸總實(shí)現(xiàn)。

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、南京網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。


一 . 字符串操作函數(shù)

字符串操作函數(shù)有很多,這里我列舉一些常用的函數(shù),以及自實(shí)現(xiàn)的代碼:

字符串拷貝函數(shù):

函數(shù)原型:

char* my_strcpy(char* dst,const char* src)

strcpy():

char* my_strcpy(char* dst,const char* src)
{
    assert(dst);
    assert(src);

    char *ret = dst;  //把首地址保存起來,因?yàn)橄旅鏁薷膁st
    while (*dst++ = *src++)
        ;

    return ret;
}

函數(shù)原型:

char* my_strncpy(char* dst,const char* src,int n)

strncpy():

char* my_strncpy(char* dst,const char* src,int n)
{
    assert(dst);
    assert(src);

    char* ret = dst;
    while (n--)
    {
        *dst++ = *src++;
    }

    return ret;
}

字符串追加函數(shù):

函數(shù)原型:

char* my_strcat(char* dst,const char* src)

strcat():

char* my_strcat(char* dst,const char* src)
{
    assert(dst);
    assert(src);

    char *ret = dst;

    while (*dst) 
        dst++;

    while (*dst++ = *src++)
        ;

    return ret;
}

函數(shù)原型:

char* my_strncat(char *dst, const char *src, int n)

strncat():

char* my_strncat(char *dst, const char *src, int n)
{
    assert(dst);
    assert(src);

    char *ret = dst;
    while (*dst)
        dst++;
    while (n--)
    {
        *dst++ = *src++;
    }

    return ret;
}

字符串比較函數(shù):

函數(shù)原型:

int my_strcmp(const char* dst,const char* src)

strcmp():

int my_strcmp(const char* dst,const char* src)
{
    assert(dst);
    assert(src);

    while ((*dst == *src) && *dst && *src)
    {
        dst++;
        src++;
        if (*dst == 0 && *src == 0)
        {
            return 1;
        }
    }

    return -1;
}

函數(shù)原型:

int my_strncmp(char* dst, const char* src, int n)

strncmp():

int my_strncmp(char* dst, const char* src, int n)
{
    assert(dst);
    assert(src);

    while (n--)
    {
        if ((*dst == *src) && *dst && *src)
        {
            dst++;
            src++;
        }
        else
        {
            return -1;
        }

        if (*dst == 0 && *src == 0) // 全部相同時的處理情況
        {
            return 1;
        }
    }    

    return 1; // 部分相同時的處理情況
}

查找子字符串函數(shù):

函數(shù)原型:

char* my_strtsr(char* str1, char* str2)

strstr():

char* my_strtsr(char* str1, char* str2)
{
    assert(str1); // 原串
    assert(str2); // 子串

    char* s1 = str1;
    char* s2 = str2;
    char* s = str2; // 保存子串的首地址

    if (*s1 == 0)
    {
        if (*s2)
            return NULL;

        return s;
    }

    while (*s1 && *s2)
    {
        if (*s1 != *s2)
        {
            s1++;
        }
        if (*s1 == *s2)
        {
            s1++;
            s2++;
        }
        if (*s1 != *s2) 
        {
            if (*s1 == 0)
            {
                return NULL;
            }
            else if (*s2 == 0)
            {
                return s;
            }

            s2 = s; //若*s1和s2不相等,則讓子串重新從頭開始
        }    
    }

    return NULL;
}



二 . 內(nèi)存拷貝函數(shù)

內(nèi)存拷貝函數(shù)這里羅列出 memcpy() 以及解決內(nèi)存拷貝時重疊的問題的函數(shù) memmove() ,附帶寫出內(nèi)存初始化函數(shù)memset() .

內(nèi)存拷貝函數(shù):

函數(shù)原型:

void* my_memcpy(void *dt,const void *src,size_t count)

memcpy():

void* my_memcpy(void *dst,const void *src,size_t count)
{
    assert(dst);
    assert(src);

    char *pDst = (char*)dst;
    char *pSrc = (char*)src;
    char *ret = (char*)dst; // 保存dst首地址

    while (count--)
    {
        *pDst++ = *pSrc++;
    }

    return ret;
}

解決內(nèi)存拷貝時 的內(nèi)存重疊問題的函數(shù):

函數(shù)原型:

void* my_memmove(void *p1,void *p2,size_t count)

memmove():

void* my_memmove(void *p1,void *p2,size_t count)
{
    // 在一個數(shù)組中進(jìn)行
    assert(p1);
    assert(p2);

    char *dst = (char*)p1;
    char *src = (char*)p2;
    char *ret = (char*)p1; // 保存首地址

    if (dst > src && (dst < src + count)) // 判斷內(nèi)存重疊情況
    {
        while (count--)
        {
            *(dst + count) = *(src + count);
        }
    }
    else // 不重疊情況
    {
        while (count--)
        {
            *dst++ = *src++;
        }
    }

    return ret;
}

內(nèi)存初始化函數(shù):

函數(shù)原型:

void* my_memset(void* arr,int c,size_t size)

memset():

void* my_memset(void* arr,int c,size_t size)
{
    assert(arr);

    char* dst = (char*)arr;
    int i = 0;
    for (i = 0; i < size; i++)
    {
        *(dst + i) = c;
    }

    return arr;
}

附源代碼及測試代碼:

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

char* my_strcpy(char* dst,const char* src)
{
    assert(dst);
    assert(src);

    char *ret = dst;  //把首地址保存起來,因?yàn)橄旅鏁薷膁st
    while (*dst++ = *src++)
        ;

    return ret;
}

char* my_strncpy(char* dst,const char* src,int n)
{
    assert(dst);
    assert(src);

    char* ret = dst;
    while (n--)
    {
        *dst++ = *src++;
    }

    return ret;
}


char* my_strcat(char* dst,const char* src)
{
    assert(dst);
    assert(src);

    char *ret = dst;

    while (*dst) 
        dst++;

    while (*dst++ = *src++)
        ;

    return ret;
}

char* my_strncat(char *dst, const char *src, int n)
{
    assert(dst);
    assert(src);

    char *ret = dst;
    while (*dst)
        dst++;
    while (n--)
    {
        *dst++ = *src++;
    }

    return ret;
}

int my_strcmp(const char* dst,const char* src)
{
    assert(dst);
    assert(src);

    while ((*dst == *src) && *dst && *src)
    {
        dst++;
        src++;
        if (*dst == 0 && *src == 0)
        {
            return 1;
        }
    }

    return -1;
}

int my_strncmp(char* dst, const char* src, int n)
{
    assert(dst);
    assert(src);

    while (n--)
    {
        if ((*dst == *src) && *dst && *src)
        {
            dst++;
            src++;
        }
        else
        {
            return -1;
        }

        if (*dst == 0 && *src == 0) // 全部相同時的處理情況
        {
            return 1;
        }
    }    

    return 1; // 部分相同時的處理情況
}

char* my_strtsr(char* str1, char* str2)
{
    assert(str1); // 原串
    assert(str2); // 子串

    char* s1 = str1;
    char* s2 = str2;
    char* s = str2; // 保存子串的首地址

    if (*s1 == 0)
    {
        if (*s2)
            return NULL;

        return s;
    }

    while (*s1 && *s2)
    {
        if (*s1 != *s2)
        {
            s1++;
        }
        if (*s1 == *s2)
        {
            s1++;
            s2++;
        }
        if (*s1 != *s2)
        {
            if (*s1 == 0)
            {
                return NULL;
            }
            else if (*s2 == 0)
            {
                return s;
            }

            s2 = s;
        }    
    }

    return NULL;
}

void* my_memcpy(void *dst,const void *src,size_t count)
{
    assert(dst);
    assert(src);

    char *pDst = (char*)dst;
    char *pSrc = (char*)src;
    char *ret = (char*)dst; // 保存dst首地址

    while (count--)
    {
        *pDst++ = *pSrc++;
    }

    return ret;
}

void* my_memmove(void *p1,void *p2,size_t count)
{
    // 在一個數(shù)組中進(jìn)行
    assert(p1);
    assert(p2);

    char *dst = (char*)p1;
    char *src = (char*)p2;
    char *ret = (char*)p1; // 保存首地址

    if (dst > src && (dst < src + count)) // 判斷內(nèi)存重疊情況
    {
        while (count--)
        {
            *(dst + count) = *(src + count);
        }
    }
    else // 不重疊情況
    {
        while (count--)
        {
            *dst++ = *src++;
        }
    }

    return ret;
}

void* my_memset(void* arr,int c,size_t size)
{
    assert(arr);

    char* dst = (char*)arr;
    int i = 0;
    for (i = 0; i < size; i++)
    {
        *(dst + i) = c;
    }

    return arr;
}


void test1()
{
    char a1[10] = { 0 };
    char a2[] = "world";

    printf("%s", my_strcpy(a1, a2));
    printf("\n");
}

void test2()
{
    char a1[15] = "hello";
    char a2[] = " world";

    printf("%s",my_strcat(a1,a2));
    printf("\n");
}

void test3()
{
    char a1[] = "abcdef";
    char a2[] = "abcdef";
    printf("%d\n",my_strcmp(a1,a2));
}

void test4()
{
    char a1[10] = "hello";
    char a2[] = " world";

    printf("%s",my_strncat(a1,a2,4));
    printf("\n");
}

void test5()
{
    int a1[10] = {1,2,3,4,5,6,7,8,9,10};
    int a2[10];
    int i = 0;

    my_memcpy(a2,a1,4);
    for (i = 0; i < 10;i++)
    {
        printf("%d ", a2[i]);
    }
    printf("\n");
}

void test6()
{
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int i = 0;

    my_memmove(a+2,a+5,4);
    for (i = 0; i < 10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}

void test7()
{
    char a1[10] = { 0 };
    char a2[] = "world";

    printf("%s", my_strncpy(a1, a2, 3));
    printf("\n");
}

void test8()
{
    char a1[] = "abcdef";
    char a2[] = "acb";

    printf("%d\n", my_strncmp(a1, a2, 2));
}

void test9()
{
    char* a1 = "abccddefgh";
    char* a2 = "cddef";

    printf("%s",my_strtsr(a1,a2));
    printf("\n");
}

void test10()
{
    int arr[10];
    int i = 0;
    my_memset(arr, 0, 32);
    for (i = 0; i < 10; i++)
        printf("%d ",arr[i]);
    printf("\n");
}

int main()
{
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    test7();
    test8();
    test9();
    test10();

    system("pause");
    return 0;
}

若有紕漏,歡迎指正。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

新聞名稱:【C語言】字符串操作函數(shù)及內(nèi)存拷貝函數(shù)歸總-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.rwnh.cn/article30/cssepo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷自適應(yīng)網(wǎng)站、域名注冊、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
淮阳县| 龙陵县| 达日县| 克拉玛依市| 岳阳县| 弥渡县| 巫山县| 保山市| 竹溪县| 尼玛县| 屏东县| 肃宁县| 桃江县| 衡东县| 台前县| 宁都县| 封开县| 德庆县| 恭城| 潍坊市| 天气| 项城市| 新安县| 江川县| 桃园市| 庆阳市| 盐城市| 河源市| 石河子市| 凤翔县| 澄江县| 广德县| 淳化县| 宜章县| 分宜县| 珲春市| 尖扎县| 白山市| 大方县| 丰县| 大同市|