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,一经查实,立即删除!

相关文章

免费视频背景素材下载

找免费视频素材、背景就上这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…

综合实验---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…

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…

(Linux学习八)进程下,虚拟文件系统proc

一、进程 foreground fg :前台进程&#xff0c;是在终端中运行的命令&#xff0c;占领终端。 background bg &#xff1a;后台进程:没有控制终端&#xff0c;它不需要终端的交互。看不见&#xff0c;但是在运行 & //后台运行程序 jobs //查看进程 kill %1 //消灭后台进…

51WORLD正式落地中东,助力沙特伙伴与客户数字化升级!

近日&#xff0c;在被誉为中东“数字达沃斯”的LEAP科技展上&#xff0c;51WORLD首次震撼亮相Digital Twin Riyadh2924k㎡ 全要素城市底座、数字地球平台51Earth&#xff0c;向中东及全球科技从业者展现中国企业技术实力与创新能力。此外&#xff0c;以LEAP为起点&#xff0c;5…

Elastic Stack--04--ES中的检索方式、Query DSL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.ES中的检索方式第一种方式GET bank/_search # 检索bank下的所有信息&#xff0c;包括 type 和 docsGET bank/_search?q*&sortaccount_number:asc 第二种方式…

Windows从0到1部署项目

文章目录 1.创建虚拟机2.文件的传输--共享文件夹共享文件夹的访问 3.安装jdk&#xff0c;Tomcat3.1jdk的安装与配置配置环境变量 3.2Tomcat的安装与配置 4.安装mysql数据库5.下载nginx6.虚拟域名 因为Windows项目部署有很多操作都是博主之前做过的了&#xff0c;所及就只放了博…

OpenCASCADE开发指南<四>:OCC 数据类型和句柄

一个软件首先要规定能处理的数据类型&#xff0c; 其次要实现三项最基本的功能——引用管理、内存管理和异常管理。在 OCC 中&#xff0c;这三项功能分别对应基础类中的句柄、内存管理器和异常类。 1 数据类型 在基本概念篇里&#xff0c;已经介绍了 OCC 数据类型的分类&…