Day28~实现strlen、strcpy、strncpy、strcat、strncat

实现strlen、strcpy、strncpy、strcat、strncat

cpp 复制代码
#include <stdio.h>

size_t my_strlen(const char *src)
{
    size_t len = 0;

    while (*src != '\0')
    {
        len++;
        src++;
    }
    return len;
}

char *my_strcpy(char *dest, const char *src)
{
    if (dest == NULL || src == NULL) // 判断输入的字符是否为空
    {
        return NULL; // 如果为空,就返回空
    }

    char *temp = dest; // 将dest的地址赋值给一个临时变量

    while (*src != '\0') // 遍历要拷贝的字符
    {
        *temp = *src; // 将src的值赋给temp
        src++;        // src地址后移
        temp++;       // temp地址后移
    }

    *temp = '\0'; // 最后一位为\0
 
    return dest; // 返回dest
}

char *my_strncpy(char *dest, const char *src, size_t n)
{
    if (dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

    size_t i;

    for (i = 0; (i < n) && (*src != '\0'); i++)
    {
        *temp = *src;
        src++;
        temp++;
    }

    for (; i < n; i++)
    {
        *temp = '\0';
    }

    return dest;
}

char *my_strcat(char *dest, const char *src)
{
    if (dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

    while (*temp != '\0')
    {
        temp++;
    }

    while (*src != '\0')
    {
        *temp = *src;
        temp++;
        src++;
    }

    *temp = '\0';

    return dest;
}

char *my_strncat(char *dest, const char *src, size_t n)
{
    if (dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

    while (*temp != '\0')
    {
        temp++;
    }

    size_t i;

    for (i = 0; (i < n) && (*src != '\0'); i++)
    {
        *temp = *src;
        src++;
        temp++;
    }

    for (; i < n; i++)
    {
        *temp = '\0';
    }

    return dest;
}

int main()
{
    char dest[100] = "Hello World";
    char src[100] = "Hello World";

    // char *result1 = my_strcpy(dest, src);
    // char *result2 = my_strncpy(dest, src, 3);
    // size_t result = my_strlen(src);
    // char *result3 = my_strcat(dest, src);
    char *result4 = my_strncat(dest, src, 3);

    // printf("%s\n", result1);
    // printf("%s\n", result2);
    // printf("%ld\n", result);
    // printf("%s\n", result3);
    printf("%s\n", result4);

    return 0;
}
相关推荐
apocelipes11 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron13 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩14 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹15 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术19 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望21 小时前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰21 小时前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
地平线开发者1 天前
J6B vio scenario sample
算法
BothSavage2 天前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法