strcat函数的使用和模拟实现

news2024/9/22 19:34:15

6dc22763e6ef45d2856fe39df0638ec3.png

目录

1.头文件

 2.函数功能​编辑

3.注意事项:

4.strcat函数模拟实现:


方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!


1.头文件

strcat函数的使用,需要头文件

#include<string.h>

 2.函数功能27d5025d7e36408fb153a3a6f7496956.png

strcat函数接收两个地址参数,这里以图片讲解,第一个地址名为destination,第二个地址名为source

我们知道,字符串只要给出其中一个字符的地址,那系统就会顺藤摸瓜出这个地址之后所有的字符,直到'\0'

而strcat函数可以将source地址所指向的字符串从destination地址所指向的字符串的 '\0' 开始,一个一个的将它(source)的字符复制上去,直到'\0'也复制上去后,结束复制

示例如下:

55f5fbdd20ab4b66a906e3525c48cf39.png

由此可见,strcat可以将arr2数组内的字符串,从arr1数组内字符串'\0'的位置开始,一个一个将(arr2的内容)复制粘贴到arr1上去,我们了解到,源字符串(arr2)在遇到'\0'时会将'\0'复制上去后停止复制,那么到底复制'\0'上去了吗?

我们再测试一下:

590ea7022ca94c4eb9926396067e6037.png

我们看到,从arr1的'\0'开始复制,将a,b,c都复制了上去,如果'\0'也复制上去,那就会有一个x被替换成'\0',打印出4个x,如果'\0'没有复制上去,就会打印5个x


3.注意事项:

strcat与strcpy的注意事项相似

1.源字符串必须以'\0'结束

2.目标字符串必须有'\0',否则不知道从哪里复制

3.目标空间必须足够大,能容纳下源字符串

4.目标空间必须可修改

5.源字符串会将'\0'也复制上去


4.strcat函数模拟实现:

如果想要实现strcat模拟实现,我们就要找到目标字符串的'\0',也要找到源字符串的'\0',最重要的是将'\0'也复制上去(上节有讲如何'\0'复制上去,这里用相同的方法)

那么,代码如下:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void my_strcat(char* arr1, char* arr2) {
	while (*arr1 != '\0') {
		arr1++;
		//这样一直增加地址,直到找到'\0'
	}
	while (*arr1++ = *arr2++) {
		// 后置++的优先级高于解引用操作符
		// 解引用操作符的优先级 高于 赋值操作符
		/* 后置++,先使用后++
		*  *arr1 = *arr2
		* arr2++
		* arr1++
		* 当*arr2 = '\0'时
		* 接着会进行*arr1 = *arr2
		* 之后再++
		* 所以'\0'也复制上去了
		*/
	}
}
int main()
{
	char arr1[20] = { "qwer" };
	char arr2[] = { "abcdef" };
	my_strcat(arr1, arr2);
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (int i = 0; i < sz; i++) {
		printf("%c ", arr1[i]);
	}
}

感谢阅读,详解在代码里,不懂可以在评论区提问或者私信

8fdd48caf53e46a897fd8a5554dbb454.png

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

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

相关文章

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

Course1-Week1: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week11️⃣线性回归&#xff08;linear regression&#xff09; f w , b ( x ) w x b f_{w,b}(x) wx b …

【深度学习讲解笔记】前言

小编为AI专业的本科学生&#xff0c;最近入手了一本《深度学习讲解》的书&#xff0c;由于封面画了苹果&#x1f34e;&#xff0c;所以也叫苹果书&#xff0c;这本书目前在全网的热度很高。 本书是根据李宏毅老师讲授的《机器学习》课程编写的&#xff0c;作者是来自DataWhale…

SCI顶刊中“introduction”经典模板,建议收藏!

Introduction Introduction 的行文框架是一个从较宽泛的学术领域逐渐缩小到你的研究目标的过程。 1.研究背景和重要性 (Background AndImportance) • Mention of previous work on the subject • A statement of the importance of the subject 引言部分的第一段需要给出…

(Charles)如何抓取手机http的报文

抓包的目的&#xff1a; 发现bug需要定位要抓包 检查数据传输的安全性 接口测试遇到需求文档不全要抓包 抓包主要抓取的是http协议&#xff08;https协议&#xff09;的报文 http协议规范客户端和服务端的数据传输格式&#xff0c;是一个标准和规范 每个http连接包括请求消息和…

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya&#xff08;不是本人&#xff0c;claude AI&#xff09;在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容&#xff1a; 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用&…

CSP-J基础之数学基础 杨辉三角 一篇搞懂

文章目录 前言杨辉三角介绍杨辉三角的结构数学中的形式杨辉三角的性质 杨辉三角进行左对齐杨辉三角的递推公式编程实现杨辉三角总结 前言 杨辉三角是数学中一个非常有趣且重要的概念。它不仅在组合数学中扮演着重要角色&#xff0c;还在许多数学问题的解决中提供了有力的工具。…

【重学 MySQL】二十、运算符的优先级

【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级&#xff08;由高到低&#xff09;注意事项示例 在 MySQL 中&#xff0c;运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…

Rust运算符

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) https://blog.csdn.net/brucexia/category_12779443.html 前面已经学习了变量和常量&#xff0c;本节开始对它们进行操作&#xff0c…

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站&#xff0c;手机流量可以访问IPV6网络的服务&#xff0c;为什么不在电脑搭建Home Assistant&am…

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为&#xff1a; 创建一个socket服务端&#xff0c;监听socket通道&#xff0c;并打印出socket通道中的内容。 创建两个socket客户端&#xff0c;向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void m…

Linux服务器应急响应(上)

目录 介绍步骤 介绍 网页篡改&#xff0c;即攻击者故意篡改网络上传送的报文&#xff0c;通常以入侵系统并篡改数据、劫持网络连接或插入数据等形式进行。 网页篡改一般有明显式和隐藏式两种。明显式网页篡改指攻击者为炫耀自己的技术技巧&#xff0c;或表明自己的观点实施的网…

《深入浅出WPF》读书笔记.11Template机制(下)

《深入浅出WPF》读书笔记.11Template机制(下) 背景 本文主要讲datatemplate和contenttemplate的联合使用&#xff0c;以及style的解析。 《深入浅出WPF》读书笔记.11Template机制(下) 代码 两者的作用域范围 datatemplate和contenttemplate的关系 两者的应用 指定目标类型…

Qt常用控件——QPushButton

QPushButton介绍 QWidget中涉及到的各种属性、函数、使用方法&#xff0c;对于Qt的各种控件都是有效的 使用QPushButton表示一个按钮&#xff0c;继承自QAbstracButton&#xff0c;这个类是一个抽象类 抽象类&#xff1a;包含纯虚函数&#xff0c;无法实例化出对象&#xff0c;…

第四届长城杯部分wp

还是太菜了&#xff0c;要经常练了 1.BrickGame 通过游戏就可以得到flag 2.SQLUP 一道文件上传的题目&#xff0c;在登陆页面我用admin和1登陆成功了&#xff0c;但是按照正常的应该是要爆破&#xff0c;用bp爆破得到下面的页面 登陆成功后&#xff0c;点击头像就可以进行文…

前端 PDF 预览技巧:标签 vs 插件,如何优雅地展示 PDF 文件

前言 pdf 作为一种常用的文档格式&#xff0c;相信很多同学都在项目中遇到过需要预览 pdf 文件的情况。其实实现的方式有很多&#xff0c;包括传统的标签 iframe 或 embed 方式&#xff0c;也可以运用一些插件&#xff0c;例如 pdf.js、vue-pdf 等等&#xff0c;本文将带大家一…

FastJson、Jackson、Gson、Hutool,JSON解析哪家强?JMH基准测试来排行

首发公众号:【赵侠客】 引言 在前面《释放你九成的带宽和内存&#xff1a;GZIP在解决Redis大Key方面的应用》一文中我使用GZIP算法对JSON格式数据进行了压缩&#xff0c;可以减小88%的空间&#xff0c;文中也提到了目前JSON格式在我们项目中应用的非常广泛几乎无处不在。压缩J…

整合Redis和RedisCacheManger

整合redis springboot在现在的版本中操作Redis数据库用到了lettuce&#xff0c;而不是Jedis&#xff0c;他们各有各的特点。Jedis以Redis命令作为方法名称&#xff0c;学习成本低&#xff0c;简单实用。但是Jedis实例是线程不安全的&#xff0c;多线程环境下需要基于连接池来使…

Java实现一个简单的本地群聊。可以多开Client。

网络编程也有趣的&#xff0c;Java中有对系统网络IO操作的封装包&#xff1a;Socket。现在我们在本地电脑&#xff08;网络&#xff09;用它来模拟一个简单的群聊功能&#xff0c;以便能更好地对网络编程进行深刻的理解。 "Client"去连接"Host",可同时多有…

JavaEE 第23节 TCP的流量控制与阻塞控制详解

目录 前言&#xff08;必读&#xff09;1、滑动窗口背景运行机制 2. 流量控制作用实现机制关键目标 3. 拥塞控制作用实现机制作用 4. 流量控制和拥塞控制的区别作用对象不同触发条件不同控制方式不同 5.总结 前言&#xff08;必读&#xff09; 流量控制&#xff08;Flow Contr…

中科院院士薛其坤:通用量子计算机还得10-20年

说到量子计算机&#xff0c;很多人都抱有不切实际的幻想&#xff0c;甚至认为它无所不能&#xff0c;很快就能取代现有的电子计算机&#xff0c;但事实上&#xff0c;目前的量子计算机只能高效解决特定问题&#xff0c;不具备通用性。在2024年浦江创新论坛上&#xff0c;2023年…