【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

news2024/9/20 0:56:00

1.复制函数--------------strcpy函数

函数使用

char*strcpy(char* destination, const char* source)

  • strcpy函数用于拷贝字符串,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖原字符串内容)。它的参数是两个指针
  • 第一个指针指向目标字符串的首地址,即要拷贝到什么地方。
  • 第二个指针指向来源字符串的首地址,即用什么字符串拷贝。返回值是目标字符串的首地址
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	//char* p = NULL;
    	//p = "zhangsan";//p是指针变量,可以赋值,将z的地址赋值给p
    	//char name[20] = "xxxxxxxxxx";
    	//name = "zhangsan";//err,name数组名是地址,地址是一个常量值,不能被赋值,name已经被固定死了
    
    	char name1[20] = "xxxxxxxxxx";
    	char str1[] = "zhang\0san";
    	strcpy(name1, str1);
    	printf("%s\n", name1);
    	
    	char name2[20] = "xxxxxxxxxx";
    	char str2[] = { 'b','i','t' };
    	strcpy(name2, str2);
    	printf("%s\n", name2);
    
    	//char* p = "abcdef";//p指向常量字符串,存放a的地址,常量字符串是不能修改的
    	//char arr[] = "bit";
    	//strcpy(p, arr);//err
    
    	//char p[] = "abcdef";//将其放入数组中,使其变成变量可以修改
    	//char arr[] = "bit";
    	//strcpy(p, arr);//right
    	return 0;
    }
    

    模拟实现





    • 复制到时候,函数会将被拷贝字符串的‘/0’一同复制到目标字符串,当字符串没有‘/0‘时,会一直向后查找,直到找到

总结:

  • 源字符串必须以 ‘\0’ 结束。
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可修改。

.模拟实现

  • 进入函数体时先定义一个指针变量保存目标空间的起始位置,便于之后返回。然后将源字符串中的字符一一赋值给目标空间,直到遇到源字符串中的’\0’,将’\0’也赋值给目标空间后结束赋值,并返回目标空间的起始位置。
#include<assert.h>
char* my_strcpy(char* destination, const char* source)
{
	assert(str != NULL);//断言,若str为NULL,报错,头文件assert.h
	//或者直接assert(destination && source);
	char* str = destination;//保存目标空间的起始位置
	while (*source != '\0')//或者直接while (*source)
	{
		*destination++ = *source++;
	}
	*destination = *source;
	return str;
}

二.strcat(字符串追加)

char *strcat( char* destination, const char* Source ); 

strcat函数用于追加字符串,即将一个字符串中的内容追加到另一个字符串中。它的参数是两个指针,

  • 第一个指针指向目标字符串的首地址,即要追加到什么地方。
  • 第二个指针指向来源字符串的首地址,即用什么字符串追加。
  • 返回值是目标字符串的首地址
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";
	strcat(arr1, "world");
	printf("%s\n", arr2);

	char arr3[20] = "hello ";
	char arr4[] = { 'a','b','c','d','e','f' };
	strcat(arr3, arr4);
	printf("%s\n", arr3);
	return 0;
}

三.strcmp(字符串比较)

1.函数使用

int strcmp(const char* str1,const char* str2)

strcmp函数用于比较两个字符串内容的函数。

它的参数是两个指针

指针分别指向两个待比较字符串的首地址。它的返回值是一个整型数字。
依次比较的是对应字符的ASCII值。

  • 当str1 > str2的时候返回正数。
  • 当str1 == str2的时候返回0。
  • 当str1 < str2的时候返回负数。

//错误的写法
#include<stdio.h>
int main()
{
	char arr1[] = "zhangsan";
	char arr2[] = "zhangsan";
	if (arr1 == arr2)
		printf("==\n");
	else
		printf("!=\n");//输出!=
	return 0;
}

//正确的比较方法
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "zhangsan";
	char arr2[] = "zhangsan";
	int ret = strcmp(arr1, arr2);
	if (ret < 0)
		printf("<\n");
	else if (ret == 0)
		printf("==\n");//输出==
	else
		printf(">\n");
	return 0;
}

  • 第⼀个字符串大于第⼆个字符串,则返回大于0的数字。
  • 第⼀个字符串等于第⼆个字符串,则返回0。
  • 第⼀个字符串小于第⼆个字符串,则返回⼩于0的数字。

那么如何判断两个字符串? 比较两个字符串中对应位置上字符ASCII码值的大小。


2.模拟实现

进入函数体直接比较起始位置的字符的大小。如果相同并且不为’\0’那么继续比较下一对字符的大小;如果相同并且为’\0’那么说明字符串比较完毕,那么直接返回0;如果不同则直接返回str1与str2中对应字符的ASCII值的差值(当str1中对应字符大于str2中的对应字符时返回正值,当str1中对应字符小于str2中的对应字符时返回负值)。

#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);//断言,若str为NULL,报错,头文件assert.h
	while (*str1 == *str2)
	{
		//遇到都为'\0'的时候,说明字符串相等返回0
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return (*str1 - *str2);
}

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

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

相关文章

TIOBE 编程指数 9 月排行榜公布 VB.Net第七

原文地址&#xff1a;百度安全验证 IT之家 9 月 8 日消息&#xff0c;TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标&#xff0c;评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#xff0c;今天 TIOBE 官网公布了 2024 年 9 月的编程语言排行榜&#xf…

Element走马灯组件循环播放两个页面是方向不一致

摘要&#xff1a;使用Carousel 走马灯循环播放同一类型的图片、文字等内容&#xff0c;会在循环内容为两组是出现下图 [1]中的现象。本文记录下如何解决 之前项目遇到过一次这个问题&#xff0c;由于indicator-position 指示器不用显示&#xff0c;则判断内容长度为2时&#xf…

恶意Bot流量识别分析实践

1、摘要 随着互联网的发展&#xff0c;自动化工具和脚本&#xff08;Bots&#xff09;的使用越来越普遍。虽然一些善意 Bots 对于网站的正常运行和数据采集至关重要&#xff0c;但恶意 Bots 可能会对网站带来负面影响&#xff0c;如爬取敏感信息、恶意注册、刷流量等。因此&am…

saltstack配置管理

一、saltstack的SSH工作模式 一、salt-ssh介绍 salt-ssh 是 0.17.0 新引入的一个功能&#xff0c;不需要minion对客户端进行管理&#xff0c;也不需要master。salt-ssh 支持salt大部分的功能&#xff1a;如 grains、modules、state 等salt-ssh 没有使用ZeroMQ的通信架构&#…

向日葵好用吗?4款稳定的远程控制软件推荐。

远程控制技术现在已经被应用于很多个领域&#xff0c;像企业办公&#xff0c;远程协助&#xff0c;智能家居&#xff0c;工业控制等等。我们常常会用到的时前两种。而实现远程控制的方式也有多种&#xff0c;但是最方便高效的还是使用第三方软件。我最常使用的是向日葵&#xf…

算法.图论-并查集上

文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板 1. 并查集介绍 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所…

游戏如何对抗定制挂

近年来&#xff0c;游戏安全对抗强度相比以往更加激烈&#xff0c;具体表现在“定制挂”趋势显著。在近期收集的近万款外挂样本中&#xff0c;定制挂约占比78%&#xff0c;常见的内存修改器、变速器等通用作弊手段占比正在下降。 所谓定制挂&#xff0c;是指针对某款游戏单独开…

SPI接口通信协议浅谈成都自动化开发

沙鸥-成都 1 什么是SPI SPI是串口外设接口的缩写&#xff0c;是一种高速的、全双工、同步的通信协议&#xff0c;是微处理器与外围IC之间常用的一种通讯方式。 SPI是主从式的通信协议&#xff0c;可以一主机一从机通信&#xff0c;也可以一主机多从机通信。 2 SPI的优缺点 SPI接…

【Java版】云HIS系统源码

云HIS系统介绍 云HIS系统是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能&#xff0c;还能与公卫、PACS等各类…

【STM32 HAL库】OLED显示模块

【STM32 HAL库】OLED显示模块 前言理论OLED基本参数OLED基本驱动原理OLED坐标轴 应用CubeMx配置底层函数代码高层封装函数printf显示函数 前言 本文为笔者学习 OLED 的总结&#xff0c;基于keysking的视频内容&#xff0c;如有错误&#xff0c;欢迎指正 理论 OLED基本参数 …

基于224G的超高速以太网端口1.6Tbps 1600G真的来了~

基于224G PAM4 SerDes的1.6T(更激进些的是3.2T&#xff09; 受AI智能算中心的驱动&#xff0c;基于4x112G的400G光模块&#xff0c;和基于8x112G的800G的光模块已经很成熟了&#xff0c;标志就是大家都在降本增效&#xff0c;考虑干掉功耗的DSP&#xff0c;...另外一个标志就是…

关于支持向量机的一份介绍

在这篇文章中&#xff0c;我将介绍与支持向量机有关的东西&#xff0c;我们知道支持向量机主要分两类&#xff0c;就是线性支持向量机和核支持向量机这两种&#xff08;当然还有其他的&#xff0c;如多类支持向量机、 Nu-Support Vector Regression等&#xff09;&#xff0c;因…

AIGC生图基础知识

一、引言 AIGC&#xff0c;即AI-Generated Content&#xff0c;是一种利用大型预训练模型如生成对抗网络&#xff08;GAN&#xff09;、扩散网络&#xff08;Diffusion&#xff09;和语言大模型&#xff08;Transformer&#xff09;等人工智能技术&#xff0c;通过对大量数据进…

Gradio 自定义组件

如何使用 Gradio 自定义组件&#xff0c;Gradio 前端使用 Svelte&#xff0c;后端使用的 Python。如何自定义一个组件呢&#xff1f;Gadio 提供了类似于脚手架的命令&#xff0c;可以生成需要开发组件的前后和后端代码。 创建组件 运行如下命令&#xff0c;gradio 会自动生成…

OBC充电机测试的步骤和规范

一、测试前准备 1. 确认测试环境&#xff1a;确保测试环境的温度、湿度等条件符合设备的工作要求。 2. 检查设备&#xff1a;检查OBC充电机是否完好无损&#xff0c;电源线、插头等是否连接良好&#xff0c;显示屏是否正常显示。 3. 准备工具&#xff1a;准备好电压表、电流…

ubuntu20.04安装cudnn

先登入账号 网址&#xff1a;https://developer.nvidia.com/cudnn 选择ubuntu20.04 x86_64&#xff08;Deb&#xff09; 在下载好文件的文件夹下打开终端 sudo apt-get install zlib1gsudo dpkg -i cudnn-local-repo-${distro}-8.x.x.x_1.0-1_amd64.debsudo cp /var/cudnn-lo…

大数据时代:历史、发展与未来

文章目录 引言1980年&#xff1a;大数据的先声2006年&#xff1a;云计算与大数据的诞生2008年&#xff1a;大数据的科学探索2009年&#xff1a;大数据成为行业热词2011年&#xff1a;大数据的商业价值2013年&#xff1a;世界大数据元年结语 引言 在信息技术飞速发展的今天&…

钢铁焦化水泥超低排的原因

钢铁、焦化和水泥行业实施超低排放的原因&#xff0c;朗观视觉小编建议大家可以从环境保护、产业升级、政策推动以及企业可持续发展等多个方面进行分析。 一、环境保护需求 空气质量改善&#xff1a;钢铁、焦化和水泥行业是传统的高污染行业&#xff0c;其排放的颗粒物、二氧化…

表格HTML

//test.html <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>表格与CSS分开示例</tit…

【STL】string 基础,应用与操作

string 1.string相关介绍 STL&#xff08;标准模板库&#xff09;中的string容器是C标准库提供的用于处理和操作字符串的类&#xff0c;位于头文件中。std::string提供了比传统的C风格字符串&#xff08;字符数组&#xff09;更方便和安全的功能&#xff0c;具有动态内存管理…