c语言实现strcpy、strcmp和strcat

本文深入探讨了C语言中常见的字符串操作函数,包括求字符串长度、字符串拷贝、比较及连接等功能的实现原理与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//求字符串长度的函数
int my_strlen(const char* pStr)
{
    assert(pStr != NULL);
    int length = 0;
    while (*pStr++ != '\0')  
    {
        length++;
    }
    return length;
}
//字符串拷贝函数
char* my_strcpy(char* strDest, const char* strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    char* pDest = strDest;    //保护参数
    const char* pSrc = strSrc;
    while (*pSrc != '\0')
    {
        *pDest++ = *pSrc++;
    }
    *pDest = '\0'; 
    return strDest;
}
//字符串比较函数
int my_strcmp(const char* strDest, const char* strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    if (*strDest == '\0'&&*strSrc != '\0')
    {
        return 0;
    }
    const char* pDest = strDest;
    const char* pSrc = strSrc;
    int result = 0;  //用于记录比较结果
    while (*pDest != '\0' || *pSrc != '\0')
    {
        if ((result = *pDest - *pSrc) != 0)    
        {
            break;    //当两字符串不相等时跳出,相等是继续往后指
        }
        pDest++;
        pSrc++;
    }
    if (result > 0)
    {
        result = 1;
    }
    else if (result<0)
    {
        result = -1;
    }
    return result;
}
//字符串连接函数
char* my_strcat(char* strDest, char* strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    char* pDest = strDest;
    char* pSrc = strSrc;
    while(*pDest != '\0')  //先将pDest指到字符串末尾
    {
        pDest++;
    }
    while (*pSrc != '\0')
    {
        *pDest++ = *pSrc++;
    }
    *pDest = '\0';
    return strDest;
}
void Test()
{
    char c1[5] = "abcd";
    char c2[4] = "123";
    char c3[20] = "123456";
    printf("c1-length:%d\n", my_strlen(c1));
    printf("my_strcpy(c1,c2):%s\n", my_strcpy(c1, c2));
    //printf("%s\n", my_strcpy(c1, c3));   //不能处理这种超出范围的,程序会崩溃!!
    printf("my_strcmp(c1,c2):%d\n", my_strcmp(c1, c2));
    printf("my_strcmp(c2,c3):%d\n", my_strcmp(c2, c3));
    printf("my_strcat(c3,c2):%s\n",my_strcat(c3,c2));
}

 

转载于:https://www.cnblogs.com/developing/articles/10992876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值