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.mzph.cn/news/741896.shtml

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

相关文章

Jtti:如何在CentOS中安装和配置Tomcat应用服务器

在CentOS中安装和配置Tomcat应用服务器非常简单&#xff0c;以下是一种基本的步骤&#xff1a; 步骤 1: 安装Java 首先&#xff0c;确保您的系统上已经安装了Java Development Kit (JDK)。Tomcat需要Java环境来运行。 sudo yum install java-devel 步骤 2: 下载和解压Tomcat 访…

免费视频背景素材下载

找免费视频素材、背景就上这6个网站&#xff0c;高质量&#xff0c;无版权可商用。 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是个设计素材网站&#xff0c;但除了设计类素材之外还有很多视频、音频、办公类等素材&#xff0c;视频素材就有上…

前端实现复制粘贴功能

在前端开发的世界里&#xff0c;复制粘贴功能就像是那个总是被忽视&#xff0c;却在关键时刻能救你一命的老朋友。我们习惯了用那些古老的魔法咒语&#xff08;document.execCommand(copy)&#xff09;来实现这一功能&#xff0c;但时代在进步&#xff0c;技术在更新&#xff0…

Frostmourne - Elasticsearch源日志告警配置

简介 配置Frostmourne 接入Elasticsearch源进行日志匹配告警&#xff0c;并静默规则&#xff0c;告警消息发送到企业微信&#xff0c;告警信息使用Markdown。 部署安装教程查看&#xff1a; https://songxwn.com/frostmourne_install ELK 安装教程&#xff1a;https://songx…

[C/C++] -- 双指针

1.简介 双指针技巧是一种常见的算法解题方法&#xff0c;通过使用两个指针在数据结构上同时移动&#xff0c;可以解决多种问题。这种技巧通常适用于数组、字符串和链表等数据结构&#xff0c;下面我将详细介绍双指针技巧的特点和应用场景&#xff1a; 特点&#xff1a; 快慢…

综合实验---Web环境搭建

题目&#xff1a; 服务器IP地址规划&#xff1a;client&#xff1a;12.0.0.12/24&#xff0c;网关服务器&#xff1a;ens36:12.0.0.1/24、ens33&#xff1a;192.168.10.1/24&#xff0c;Web1&#xff1a;192.168.10.10/24&#xff0c;Web2&#xff1a;192.168.10.20/24&#xf…

pcl弧度角度换算:rad2deg,deg2rad

角度弧度换算公式: 代码及结果在:cmath 中cos sin等常用函数的坑(弧度角度换算)-CSDN博客 pcl也有自带的rad2deg,deg2rad: 头文件 #include<pcl/common/angles.h> 代码如下 #include <iostream> #include<pcl/common/angles.h> int main() {vector<…

3/13/24运算符、补码、整型、浮点型、汇编

目录 三目运算符 逗号运算符 自增自减运算符 位运算 运算符优先级 补码讲解 整型解析 溢出解析 浮点数IEEE754标准解析 浮点数精度丢失 真题 汇编指令 生成汇编方法 常用指令 三目运算符 条件运算符是C语言中唯一的三目运算符。通过判断问号之前的表达式的真假&…

【随笔记】小程序轮播图,一屏显示三个swiper-item

常见的轮播是一屏显示一个swiper-item,有的时候需要一屏显示三个swiper-item,左右两边都显示出一点 【目前小程序基础库2.12.3 效果正常,3.几的效果会有点不正常】 效果图 wxml <!-- 轮播begin --> <swiper wx:if="{{up_down}}" class="card-swipe…

【C++】thread 头文件无法正常使用问题

问题 当我使用MinGW GCC&#xff0c;在windows上编写C程序的时候&#xff0c;使用thread类会无法编译&#xff0c;有如下错误&#xff1a; 我使用的是c17 这个问题原因是MinGW GCC当前仍缺少标准C 11 及以上版本线程类的实现。 解决方案 Stackoverflow上的类似问题: 传送门…

a-table:实现跨域多选功能——基础积累

table组件跨页多选功能&#xff1a; html部分的代码&#xff1a; <a-tablesize"small"style"margin-top: 10px"rowKey"id":columns"columns":dataSource"dataSource":pagination"pagination":loading"l…

零基础自学C语言|自定义类型:联合与枚举

✈联合体 &#x1f680;联合体的类型声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫&#xff1a;共用体。 给…

机试:计算第几天

问题描述: 代码示例: //计算第几天 #include <bits/stdc.h> using namespace std;int main(){cout << "输入样例" << endl; int year;int month;int day; cin >> year >> month >> day;int months1[12] {31,28,31,30,31,30,3…

Java错误:微服务报错Cannot execute request on any known serve

&#x1f414;问题内容 报Cannot execute request on any known server 这个错&#xff1a;连接Eureka服务端地址不对。 &#x1f414;解决方式 检查.yml文件或者.properties文件配置 下划线下划线后面的小写字母等同于去掉下划线大写下划线后面的字母&#xff08;驼峰原则&am…

抖音私信撤回还留痕迹吗?私信撤回有时间限制吗?

一、抖音私信撤回还留痕迹吗&#xff1f; 撤回痕迹&#xff1a;根据目前的情况来看&#xff0c;抖音私信撤回后不会留下明显的痕迹。当你撤回一条私信时&#xff0c;对方将无法再看到这条消息。在他们的聊天记录中&#xff0c;撤回的消息将不再显示。因此&#xff0c;从对方的…

ATFX:美国2月未季调核心CPI年率录得3.8%,低于前值0.1个百分点

ATFX汇市&#xff1a;据美国劳工部数据&#xff0c;美国2月未季调核心CPI年率&#xff0c;最新值3.8%&#xff0c;前值为3.9%&#xff0c;预期值3.7%&#xff0c;最新值低于前值0.1个百分点&#xff0c;意味着高通胀问题正在逐步缓解&#xff0c;最新值高于预期值&#xff0c;意…

Spring启动“--”设置参数没生效

现象 在idea中启动SpringBoot项目时&#xff0c;使用“--”设置的启动参数没有生效&#xff0c;如修改端口号“--server.port8082” 原因 排查发现是因为在使用SpringApplication.run启动项目时&#xff0c;没有将args参数传入run方法。 修复方案 SpringApplication.run参数中…

自动化运维工具 ---------------Ansible

一、Ansible 发展史及功能 作者&#xff1a;Michael DeHaan&#xff08; Cobbler pxe kikstar 与 Func 作者&#xff09;ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具&#xff0c;使用它可以在相距数光年的距离&#xff0c;远程实时控制前线的舰队战斗2…

C#中IEnumerable<string>和IList<string>的区别

在C#中&#xff0c;IEnumerable<string>和IList<string>是两种不同的接口&#xff0c;它们具有不同的特性和用途。 IEnumerable<string>: IEnumerable<string> 是一个最基本的接口&#xff0c;表示能够枚举一组字符串。它提供了一个用于迭代集合中元素…

智能分析与决策:电商平台利用API进行市场洞察和消费者行为研究

电商平台在当今竞争激烈的市场环境中&#xff0c;依赖于深入的市场洞察和消费者行为研究来制定智能决策。API&#xff08;应用程序编程接口&#xff09;在这一过程中扮演着至关重要的角色&#xff0c;它连接了不同的数据源和分析工具&#xff0c;为电商平台提供了实时的、全面的…