news 2026/8/15 8:05:11

C语言(strcat怎么解决自己连接自己的问题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言(strcat怎么解决自己连接自己的问题)
int main() { char arr[100] = "abcde"; strcat(arr, arr); printf("%s\n", arr); //a b c d e \0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 //a b c d e a b c d e a b c d e a b c d e a b c d e 越界 }
void My_strcat(char arr[], char brr[]) { int i, j; for (i = 0; arr[i] != '\0'; i++); for (j = 0; brr[j] != '\0'; i++, j++) { arr[i] = brr[j]; } arr[i] = brr[i]; }

无论是库函数strcat,还是手动实现的My_strcat,都存在同样的问题

那是什么原因造成的呢?

我们先来分析一下:

首先我们要知道strcat的工作流程:

(1)先遍历目标字符串,先找到它的'\0'

(2)再把源字符串的内容,从'\0'开始复制到目标字符串

(3)同时将源字符串的'\0'加到目标字符串末尾

其次执行strcat(arr,arr),目标字符串和源字符串是同一内存,就会导致:

(1)strcat找到目标arr的'\0'

(2)源arr从'\0'开始复制到目标arr,

这就导致了:找不到'\0',发生了越界中断

//a b c d e \0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

//a b c d e a b c d e a b c d e a b c d e a b c d e 越界

strcat怎么解决自己连接自己的问题

方法一:提前开辟一片空间

提前开辟一片空间,将brr和'\0'都保存起来,不会造成覆盖和死循环

void My_strcat(char arr[], char brr[]) { char crr[1000];//空间要足够大 strcpy(crr, brr); strcpy(arr + strlen(arr), crr);//1+arr长度,继续接着这个复制 }

方法二:提前知道brr的长度

void My_strcat(char arr[],char brr[]){ int len=strlen(brr);//先确定brr长度 while(*arr) arr++;//先走到arr'\0'的位置 while(len--) *arr++=*brr++; *arr='\0'; }

方法三:不覆盖arr的‘\0’

从后往前覆盖 不会造成这种现象
brr:a b c d e \0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
arr:a b c d e a b c d e \0

void My_strcat(char arr[],char brr[]){ int len1 = strlen(arr);//5 int len2 = strlen(brr);//5 char* p = arr + len1 + len2;//11 char* q = brr + len2;//6 int t = len1 + 1;//6 加上'\0' while (t--) { *p--=*q--; } }

测试:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 8:02:49

SeqGPT-560M企业级信息抽取实战:零幻觉NER保姆级教程

SeqGPT-560M企业级信息抽取实战:零幻觉NER保姆级教程 1. 引言:告别“幻觉”,精准抽取 想象一下,你手头有几千份简历,需要快速提取出候选人的姓名、电话、工作经历和技能。或者,你每天要处理大量的新闻稿、…

作者头像 李华
网站建设 2026/7/14 16:00:54

Linux基础命令全解析

目录就是文件夹 ls 显示文件属性 只有ls 显示当前路径下文件名 ls -l 显示当前路径下文件的更多属性(包括文件名) ls -l 显示的第一个字母如果是d,表示这个文件是目录(directory) 是- ,表示是普通…

作者头像 李华
网站建设 2026/7/14 16:01:07

基于SpringBoot的校园社团活动智能匹配与推荐系统

项目简介 本系统是一个基于Spring Boot的校园社团活动智能匹配与推荐系统,通过用户画像构建、协同过滤和内容相似度计算等技术,为大学生提供个性化社团活动推荐服务。系统采用前后端分离架构,包含完整的用户管理、社团管理、活动管理和智能推…

作者头像 李华
网站建设 2026/7/14 16:01:05

Qwen-Image-2512-SDNQ Web服务实战:前端Vue组件封装调用/generate接口

Qwen-Image-2512-SDNQ Web服务实战:前端Vue组件封装调用/generate接口 1. 项目概述 今天我要分享一个特别实用的项目:基于Qwen-Image-2512-SDNQ模型的图片生成Web服务。这个服务最大的特点就是简单易用,你只需要在浏览器里输入文字描述&…

作者头像 李华
网站建设 2026/7/14 16:01:05

语音AI落地新路径:IndexTTS-2-LLM行业应用案例详解

语音AI落地新路径:IndexTTS-2-LLM行业应用案例详解 1. 项目概述 IndexTTS-2-LLM智能语音合成服务是一个基于先进语音合成技术的完整解决方案。该项目将大语言模型的能力引入语音生成领域,创造出更加自然、富有表现力的合成语音。 传统的语音合成技术往…

作者头像 李华