strcat函数详解:字符串追加的利器

news2024/11/27 22:29:44

目录

一,strcat函数的简介

二,strcat函数的使用 

三,strcat函数的注意事项

四,strcat函数的模拟实现


一,strcat函数的简介

strcat函数用于将源字符串追加到目标字符串的末尾,并返回一个指向目标字符串的指针,它可以实现字符串的拼接操作。

 🍂函数头文件: 

#include <string.h>

🍂函数原型: 

char * strcat ( char * destination, const char * source );
  • dest:目标字符串,即要将源字符串追加到其末尾的字符串。
  • src:源字符串,即要追加到目标字符串末尾的字符串。 

二,strcat函数的使用 

下面的代码示例展示了如何使用strcat函数将两个字符串拼接在一起:

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[20] = "Hello\0************";
	char str2[] = "World!";

	strcat(str1, str2);
	printf("%s\n", str1);

	return 0;
}

🎈运行结果:

 

🎈解析: 

使用strcat函数目标字符串追加字符时,首先要找到目标字符串中'\0'的位置,然后在'\0'的位置上向后追加源字符串。由上图我们可以看出源字符串str2是从目标字符串str1中的'\0'位置开始追加的,同时源字符串str2中的'\0'也一并追加了过去。

三,strcat函数的注意事项

1,目标字符串必须具有足够的空间来容纳源字符串的内容,否则可能会导致缓冲区的溢出。

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[6] = "Hello";
	char str2[] = "World!";

	strcat(str1, str2);
	printf("%s\n", str1);

	return 0;
}

🎈运行结果:

 

🎈分析: 

这段代码中目标字符串空间太小,无法容纳追加过来的源字符串,所以程序运行起来后会报错。

2,源字符串和目标字符串都必须以空字符'\0'结尾,否则结果会出现意外的错误。

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[20] = "Hello";
	char str2[] = "'W', 'o', 'r', 'l', 'd', '!'";

	strcat(str1, str2);
	printf("%s\n", str1);

	return 0;
}

 🎈运行结果:

3,目标空间必须可修改。

#include <stdio.h>
#include <string.h>

int main()
{
	char* str1 = "Hello";
	char str2[] = "World!";

	strcat(str1, str2);
	printf("%s\n", str1);

	return 0;
}

  🎈运行结果:

 🎈分析: 

上面这段代码中str1是字符型指针,指向的是常量字符串,是不能被修改的,而目标空间必须可修改,所以当源字符串往目标字符串后面追加时,程序会崩溃。

4,源字符串的内容不会更改,而是将其拷贝到目标字符串的末尾。

四,strcat函数的模拟实现

#include <stdio.h>
#include <string.h>
#include <assert.h>

char* my_strcat(char* dest, const char* src)//加const防止源字符串被意外修改
{
	//因为函数返回的是一个指向目标字符串首地址的指针,
	//而在后面的程序中目标字符串的地址会发生变动,
	//所以提前将目标字符串首地址保存起来
	char* ret = dest;
	assert(dest && src);//对目标字符串和源字符串进行断言,防止空指针
	//1.找到目标空间的末尾
	while (*dest != '\0')
	{
		dest++;
	}
	//2.数据追加
	while (*dest++ = *src++)
	{
		;
	}
	return ret;//返回目标字符串的首地址
}

int main()
{
	char str1[20] = "Hello";//定义目标字符串
	char str2[] = "World!";//定义源字符串

	my_strcat(str1, str2);//函数调用
	printf("%s\n", str1);

	return 0;
}

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

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

相关文章

QString、QLatin1String、QStringLiteral区别和用法以及效率

QString类 QString是Qt框架中提供的字符串类&#xff0c;用于处理Unicode字符串。它提供了许多方便的方法和功能&#xff0c;可以进行字符串的连接、查找、替换、截取等操作。QString类的对象是可变的&#xff0c;可以在运行时修改字符串内容。 . 由以上引出一个知识点&#xf…

LabVIEW(一)简介

LabVIEW&#xff08;Laboratory Virtual Instrument Engineering Workbench&#xff09;是一种程序开发环境&#xff0c;是由美国国家仪器&#xff08;NI&#xff09;公司研制开发的。LabVIEW与其他计算机语言的显著区别是&#xff1a;其他计算机语言都是采用基于文本的语言产生…

linux驱动开发找不到工作寻求前辈建议?

linux驱动开发找不到工作寻求前辈建议? 不要局限驱动&#xff0c;我毕业的时候不成熟的想法就是做驱动比做应用有技术含量&#xff0c;就努力往这方面做&#xff0c;我就从应用转到驱动最近很多小伙伴找我&#xff0c;说想要一些Linux内核学习资料&#xff0c;然后我根据自己从…

产品经理必备知识——API接口

前言 在古代&#xff0c;我们的传输信息的方式有很多&#xff0c;比如写信、飞鸽传书&#xff0c;以及在战争中使用的烽烟&#xff0c;才有了著名的烽火戏诸侯&#xff0c;但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代&#xff0c;我通过…

嵌入式养成计划-36----C++引用--const--函数重载--结构体--类

八十、 引用 80.1 概念 引用是给目标取了个别名。引用与目标&#xff0c;它俩的地址一样 80.2 格式 数据类型 &引用名 同类型的变量名&#xff1b;数据类型 &引用名 同类型的变量名&#xff1b; eg&#xff1a;int a;int &b a; //b引用a,给a取个别名叫b80.3…

ps安装遇到问题

安装PhotoShop报错 无法写入注册表值请检查权限(错误代码160)_ps安装无法写入注册表值错误160_Zhac的博客-CSDN博客在Visual Studio中创建DLL项目 打开VS 新建一个项目&#xff1a;文件→→新建→→项目 选择Visual C#类库(.NET Framework)Unity当前只支持最高 3.5版本将UnityE…

MySQL增删查改(进阶1)

一、数据库约束 约束&#xff1a;按照一定条件进行规范的做事&#xff1b; 表定义的时候&#xff0c;某些字段保存的数据需要按照一定的约束条件&#xff1b; 1.null约束 字段null&#xff1a;该字段可以为空&#xff1b;not null&#xff1a;该字段不能为空不指定的话就是…

Bigemap是如何在生态林业科技行业去应用的

选择Bigemap的原因&#xff1a; ①之前一直是使用的谷歌地球&#xff0c;现在谷歌不能使用了就在网上搜索找一款可以替代的软件&#xff0c;工作使用需求还是挺大的&#xff0c;谷歌不能用对工作进展也非常影响&#xff0c;在网上搜索到软件大部分功能都可以满足需求 ②软件卫…

小白自学—网络安全(黑客技术)笔记

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类…

Unity Golang教程-Shader编写一个流动的云效果

创建目录 一个友好的项目&#xff0c;项目目录结构是很重要的。我们先导入一个登录界面模型资源。 我们先创建Art表示是美术类的资源&#xff0c;资源是模型创建Model文件夹&#xff0c;由于是在登录界面所以创建Login文件夹&#xff0c;下面依次是模型对应的资源&#xff0c…

3D 生成重建004-DreamFusion and SJC :TEXT-TO-3D USING 2D DIFFUSION

3D 生成重建004-DreamFusion and SJC &#xff1a;TEXT-TO-3D USING 2D DIFFUSION 文章目录 0 论文工作1 论文方法1.1论文方法1.2 CFG1.3影响1.4 SJC 2 效果 0 论文工作 对于生成任务&#xff0c;我们是需要有一个数据样本&#xff0c;让模型去学习数据分布 p ( x ) p(x) p(x…

如何查看端口占用(windows,linux,mac)

如何查看端口占用&#xff0c;各平台 一、背景 如何查看端口占用&#xff1f;网上很多&#xff0c;但大多直接丢出命令&#xff0c;没有任何解释关于如何查看命令的输出 所谓 “查端口占用”&#xff0c;即查看某个端口是否被某个程序占用&#xff0c;如果有&#xff0c;被哪…

HDLbits: Shift18

先补充一下算术移位寄存器和按位移位寄存器&#xff1a; SystemVerilog具有按位和算术移位运算符。 按位移位只是将向量的位向右或向左移动指定的次数&#xff0c;移出向量的位丢失。移入的新位是零填充的。例如&#xff0c;操作8’b11000101 << 2将产生值8’b00010100…

【LeetCode高频SQL50题-基础版】打卡第3天:第16~20题

文章目录 【LeetCode高频SQL50题-基础版】打卡第3天&#xff1a;第16~20题⛅前言 平均售价&#x1f512;题目&#x1f511;题解 项目员工I&#x1f512;题目&#x1f511;题解 各赛事的用户注册率&#x1f512;题目&#x1f511;题解 查询结果的质量和占比&#x1f512;题目&am…

拆解CPU的基本结构和运行原理

CPU的基本结构 CPU是一个计算系统的核心 南北桥芯片将CPU与外设连接起来 CPU执行流程 CPU的电路基础 组合电路基本原理 时序电路基本原理 多核成为主流 汇编语言和寄存器 中断的基本原理 中断的产生 中断服务程序 CPU 做为计算机的总司令官&#xff0c;它管理着计算…

NEFU数字图像处理(2)图像增强

一、背景 图像在传输或处理过程中会引入噪声或使图像变模糊&#xff0c;从而降低了图像质量&#xff0c;甚至淹没了特征给分析带来困难&#xff0c;因此要增强特征&#xff0c;进行处理 图像增强按特定的需要突出一幅图像中的某些信息同时&#xff0c;削弱或去除某些不需要的信…

一文带你了解IAM(身份与访问管理)

一文带你了解IAM&#xff08;身份与访问管理&#xff09; 在进入新公司时&#xff0c;领导说让我们改版之后采用IAM的方式进行资源管理&#xff0c;what&#xff1f;IAM是什么&#xff1f;恕我无知了。后来查阅了相关资料才知道。 IAM不仅是一种产品&#xff0c;也是大部分产品…

NewStarCTF 2023 WEEK1|PWN ret2text

拖进IDA&#xff0c;查看 int __cdecl main(int argc, const char **argv, const char **envp) {char buf[32]; // [rsp0h] [rbp-20h] BYREFinit();puts("Welcome to NewStar CTF!!");puts("Show me your magic");read(0, buf, 0x100uLL);return 0; } ma…

Golang 程序漏洞检测利器 govulncheck(三):github 集成方法

上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 使用的漏洞数据库&#xff08;Go vulnerability database&#xff09;&#xff0c;本文详细讲解下 Github 项目如何使用 govulncheck。 govulncheck 为 Golang 开发者提供了一种准确可靠的方式来了解程序中可能存在…

matlab高斯消元法求逆

算法实现基本与高斯消元法求解线性方程组相同&#xff0c;同样还是三层循环进行消元和回代&#xff0c;只是增广矩阵的规模由nn1变成了n2n&#xff0c;因此算法复杂度仍然为O(n3)。 A[1,1,2,1;1,2,0,1;1,4,2,1;1,8,2,4]; beye(4); A_b[A,b]; [n,m]size(A_b); for i1:nfor jm:-…