strcat函数

函数理解记忆:str表示是<string.g>中的函数,cat表示附加。意思是将一个字符串的内容附加到另一个字符串的末尾。

注意要点:既然要附加,附加的字符串和被附加的字符串都要有'\0'。否则不知道附加多少,不知附加在哪。

函数的传入值和返回值: char* strcat(char*brr,const char*arr),其中brr是被附加者,arr是附加者。返回附加的结果的指针。

函数的自我实现

char* my_strcat(char* brr, char* arr) {
    while (*(brr++) != '\0') { ; }             //找到brr的末尾
    --brr;                                            //找到'\0'后brr还会加一次,所以要将地址减一
    while ((*(brr++) = *(arr++) )!= '\0') { ; }   //这里先赋值再判断如果满足地址加加,不满足退出循环
    return brr;
}

但是这个代码看着不好看,我们用for循环重新搞一下

char* my_strcat(char* brr, char* arr) {
    for (; *brr != '\0'; ++brr);  //也满足先判断后增,但是是前增,不会有判断是'\0'后又加一次
    for (*brr = *arr; *arr != '\0'; *(++brr)=*(++arr));//先赋值一次,如果arr开始就是'\0'也没问题,不改变brr。然后判断是否满足循环条件,然后继续地址加加的形式赋值。这样可以防止越界
    return brr;
}

但是就算是库里面的strcat也有很大的问题,如果我们不把brr的空间搞足就会报错。所以我自己改进了一下

char* my_strcat(char* brr, char* arr, int capacity_brr) {//因为这里不能用sizeof来求空间,只能自己输入
    int lenbrr = (int)strlen(brr);
    int lenarr = (int)strlen(arr);       
    char* newbrr = brr,*pbrr=NULL;
    if (capacity_brr < (lenbrr + lenarr)) {
        pbrr = (char*)malloc(sizeof(char) * (lenbrr + lenarr));//如果空间不足就创建一个更大的,用不了realloc,因为两个字符串不是malloc或者realloc创建出来的。
        if (pbrr == NULL)return NULL;//判断创建好了没
        strcpy(pbrr, brr);//把brr的东西拷贝到新的内存中
        newbrr = pbrr;
    }
    int k = 0;
    for (; *newbrr != '\0'; ++newbrr)++k;
    for (*newbrr = *arr; *arr != '\0'; *(++newbrr)=*(++arr))++k;//同样的操作
    return newbrr - k;
}

但是我觉得依然有点问题,这里自己多加了传入值。这里也不能用realloc导致brr空间会浪费掉(不能free)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深信服技术认证“SCCA-C”划重点:深信服应用交付AD

为帮助大家更加系统化地学习云计算知识&#xff0c;高效通过云计算工程师认证&#xff0c;深信服特推出“SCCA-C认证备考秘笈”&#xff0c;共十期内容。“考试重点”内容框架&#xff0c;帮助大家快速get重点知识 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff08;S…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通信号灯识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;本研究详细介绍了一种采用深度学习技术的交通信号灯识别系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地…

2023 年安徽省职业院校技能大赛(高职组)

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&#…

【gpt实践】李某的AI课程值199吗

先说个人的答案&#xff1a;不值。但也不是说毫无价值&#xff0c;只是他的价值没那么高。 文末分享该课程&#xff0c;大家有兴趣可以看看&#xff0c;该课程是否有价值。 “清华博士”推出的199元的AI课程销售额竟然突破了5000万。这一数字让人惊叹&#xff0c;也引发了人们…

YOLOv9改进项目|关于本周更新计划的说明24/3/12

目前售价售价59.9&#xff0c;改进点30个 专栏地址&#xff1a; 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 日期&#xff1a;24/3/12 本周更新计划说明&#xff1a; 1. 更新华为Gold YOLO中的…

阿里云服务器安全狗免费使用多引擎智能查杀引擎

云服务器具有按量付费、降低综合成本等诸多优势&#xff0c;受到很多企业的欢迎。 因此&#xff0c;目前使用的云服务器越来越多。 阿里云是目前云服务器中最具影响力的品牌&#xff0c;因此选择阿里云服务器的用户数量也是最多的。 那么阿里云服务器需要安装杀毒软件吗&#x…

城市轨道交通站应急照明疏散指示系统设计

彭姝麟 Acrelpsl 1.传统应急照明和疏散指示系统设计方案 车站应急照明由备用照明和疏散指示照明组成。车站正常照明与应急照明设计的照度不低于表 1 规定的值。按地铁防火设计标准要求&#xff0c;备用照明的设置方案&#xff1a;&#xff08;1&#xff09;在变电所、配电室、…

某电信公司组织结构优化咨询项目成功案例纪实

——构建前后端组织结构&#xff0c;提升组织运营效率 随着企业的不断发展&#xff0c;行业的竞争也越来越激烈&#xff0c;企业只能不断调整自身的战略才能更好的适应这样的大环境。在战略调整的过程中&#xff0c;企业往往会面临这样的问题&#xff1a;管理层的经营理念各不…

sqllab第九关通关笔记

知识点&#xff1a; 时间盲注&#xff1a;利用休眠时间进行判断是否注入成功利用bp时注意把timeout时间修改一下 首先判断注入类型 构造id1/0 返回正常信息&#xff0c;应该是字符型注入 构造id1 返回正常信息&#xff0c;欸&#xff0c;这就怪了 构造id1 正常显示内容&am…

Windows系统安装OpenSSH结合VS Code远程ssh连接Ubuntu【内网穿透】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-mEkKUraSFHLKkzIj {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

tongweb7部署应用后应用卡顿的参考思路(by lqw)

文章目录 1.优化jvm和openfile相关参数2.排除网络延迟&#xff08;仅供参考&#xff09;3 查看服务器资源的使用情况3.1查看方式3.1.1cpu占用过高方法1&#xff1a;使用脚本show-busy-java-threads.sh进行分析方法2&#xff1a;使用jstack 3.1.2内存占用过高3.1.1线程阻塞 3 数…

Netty线程模型详解

文章目录 概述单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 概述 Netty的线程模型采用了Reactor模式&#xff0c;即一个或多个EventLoop轮询各自的任务队列&#xff0c;当发现有任务时&#xff0c;就处理它们。Netty支持单线程模型、多线程模型和混合线程模型…