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)。

相关推荐
今夜有雨.1 小时前
图像运算、掩膜/ROI 与绘制交互
c语言·数据结构·c++·qt·算法·计算机视觉
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言概述 —— 知识点详解(1)
c语言·开发语言·学习
东木月1 小时前
Windows C 盘清理指南:安全删除临时文件、缓存与 Prefetch
c语言·windows·安全
水饺编程2 小时前
第1章,[Win32 章节]:Windows 的方方面面
c语言·c++·windows·visual studio
我就是不信2 小时前
用 C 语言实现一个支持 HTML 与视频的 HTTP(S) 服务器
c语言·html·音视频
Helix2502 小时前
2026编程入门指南:零基础如何科学选择第一门编程语言?
java·c语言·javascript·零基础·编程语言·python入门·编程就业
Escalating_xu3 小时前
【C 语言】字符函数和字符串函数:从 ctype 到 strtok、strerror 全面解析
java·c语言·开发语言
yyy(十一月限定版)13 小时前
224redfg
c语言
小师兄吃牛肉15 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
lhbweilai16 小时前
深挖FreeRTOS内核实现(三)
c语言·stm32·单片机