编程实现:strcat函数(不使用C的字符串库函数)

char* MyStrcat(char* strDest, const char* strSrc)      //知识点1
{
	char* d = strDest;                                 //知识点2

	while(*strDest)                                    //知识点3
		strDest++;
	
	while(*strSrc)
		*strDest++ = *strSrc++;                        //知识点4
		
	*strDest = '\0';
	
	return d;
}

知识点:

  1. char * :指针函数,返回地址量;注意返回值的内存管理问题,需为全局变量/静态变量/字符串常量/动态内存(堆地址)。
  2. 最后返回时应为该字符串首地址,故先在程序中保存字符串首地址。
  3. while(*strDest != '\0')  --> while(*strDest) 同义,可简化。
  4. *strDest++ = *strSrc++ 等价:
    *strDest = *strSrc;
    strDest++;
    strSrc++;

    *与++优先级相同,但由于右运算,*strSrc++等价为*(strSrc++);又因strSrc++自增运算是使用自增之前的值,故整体的运算应为:*strDest=*strSrc; strDest++; strSrc++ 。

  5. 代码还可简化:

    char* MyStrcat(char* strDest, const char* strSrc)
    {
    	char* d = strDest;
    
    	while(*strDest++);                              //注意(1)
        strDest--;
    	
    	while(*strDest++ = *strSrc++);                  //注意(2)
    	
    	return d;
    }

    注意:(1)while(*strDest++);先完成括号内的运算,再进行逻辑判断。*strDest++:自增但使用自增前的值解引用;故判断循环结束:当解引用值等于'\0'时,strDest已自增到'\0'的下一位置。故需strDest--,让指针回到'\0'位置。
    (2)while(*strDest++ = *strSrc++); 由于是先完成括号内的运算,再进行逻辑判断,所以'\0'已经赋过值了,不用再写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值