1.拷贝函数指针应用

#include <stdio.h>

#include <string.h>

char * my_strcpy(char * dest, const char *src)// const 定义 *src后 *src只可读 不可写

{

    if (dest == NULL || src == NULL) 

        return NULL;

    int i = 0;

    while (1)

    {

        *(dest + i) = *(src + i);

        if(*(src + i) == '\0')

            break;

        i++;

    }

    return dest;

}



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

{

    if (dest == NULL || src == NULL)

        return NULL;

    int i = 0;

    while (n--)

    {

        *(dest + i) = *(src + i);

        if(*(src + i) == '\0')

            break;

        i++;

    }

    return dest;

}

int my_strlen(const char *s)

{

    if (*s == 0)

    return 0;

    int i = 0;

    while(1)

    {

        i++;

        if(*(s + i) == '\0')

        break;

    }

    return i;

}

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

{

    if (dest == NULL || src == NULL)

        return NULL;

    int i = 0;

    int index = my_strlen(dest);

    while (1)

    {

        *(dest + i + index) = *(src + i);

        if(*(src + i) == '\0')

            break;

        i++;

    }

    return dest;

}



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

{

    if (dest == NULL || src == NULL)

        return NULL;

    int i = 0;

    int index = my_strlen(dest);

    while (1)

    {

        *(dest + i + index) = *(src + i);

        i++;

        if (n == i)

            break;

    }

    return dest;

}



int my_strcmp(const char *s, const char *t)

{

    int i = 0;

    int flag;

    while(1)

    {

        if (*(s + i) == '\0' && *(t + i) == '\0')

        {

            flag = 0;

            break;

        }

        if (*(s + i) > *(t + i))

        {

            flag = 1;

            break;

        }

        if (*(s + i) < *(t + i))

        {

            flag = -1;

            break;

        }

        i++;

    }

    return flag;

}

int my_strncmp(const char *s, const char *t, int n)

{

    int i = 0;

    while(1)

    {

        if (*(s + i) == '\0' && *(t + i) == '\0')

        {

            return 0;

        }

        if (*(s + i) > *(t + i))

        {

            return 1;

        }

        if (*(s + i) < *(t + i))

        {

            return -1;

        }

        i++;

        n--;

        if (n == 0)

        {

            if(*(s + i) != '\0')

            return 1;

        }

    }

}

int main()

{

    char str[32] = {"abcde"};

     // strcpy(str, "hello");

    // strncpy(str, "hello", 10);

    // strncpy(str, "hello", 5);

    // strncpy(str, "hello", 3);

    // puts(str);

    // puts(my_strcpy(str, "123456"));



    printf("%d", my_strcmp(str, "abcdef"));// 两个字符串作比较  结果为 -1

    printf("\n");

    printf("%d", my_strncmp(str, "abcdef", 3));  // 结果为1

    printf("\n");

    // puts(my_strcat(str, "abc"));// 将字符串 “abc” 加到 str 末尾  结果为 abcdeabc

    puts(my_strncat(str, "abcde", 3));结果为 abcdeabc



    puts(my_strncpy(str, "123456", 4));// 打印 4 个字节后 继续打印到 eabc\0 结束 结果为 1234eabc

    // 若是 10 打印 123456后 \0 结束打印



   

    printf("%d \n", my_strlen(str)); // 结果为 8

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值