C语言----strcpy和strcat的使用和模拟实现

一,strcpy()函数

strcpy() 函数是 C语言中一个非常重要的字符串处理函数,其功能是将一个字符串复制到另一个字符串中。该函数原型如下:

char*strcpy(char*dest,const char*src)

其中,dest 表示目标字符串,即将被复制到的字符串;src 表示源字符串,即将被复制的字符串。函数返回一个指向目标字符串的指针。

具体使用方法

我们可以先定义一个源字符串,arr1和一个目标字符串arr2,然后调用strcpy()函数将源字符串arr1中的内容复制到arr2中,最后我们可以使用printf()函数输出源字符串和目标字符串的值。

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "Hello World";
    char arr2[100];
    strcpy(dest, src);
    printf("Source String: %s\n", arr1);
    printf("Destination String: %s\n", arr2);
    return 0;
}

运行结果

我们可以看到arr1和arr2打印的结果是一样的,说明strcpy()函数正确的将arr1中的内容复制到arr2中了

注意

1,在使用strcpy()函数时arr2一定要有足够大的空间来储存arr1中复制过来的内容,否则,就会导致内存越界和数据丢失,

2,由于 strcpy() 函数的第二个参数是一个 const char * 类型,即源字符串是只读的,因此在复制过程中不会改变源字符串的值。

二,strcat()函数

strcat函数可以将一个字符串拼接到另一个字符串的末尾,

char*strcat(char*dest,const char*src)

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[50] = "Hello";
    char str2[50] = "World";
    strcat(str1, str2);
    printf("Result: %s\n", str1);
    return 0;
}

运行结果

我们可以看到strcat()函数将字符串arr2拼接到字符串arr1的末尾。strcat()函数用于将一个字符串拼接到字符串的末尾,同样,strcat()函数也要注意内存的越界。

三,strncpy()函数

有时候我们需要复制一个字符串的前 n 个字符,而不是整个字符串。可以使用 strncpy() 函数来实现这个功能,

char *strncpy(char *dest, const char *src, size_t n);

其中,dest 表示目标字符串,即将被复制到的字符串;src 表示源字符串,即将被复制的字符串;n 表示要复制的字符数。函数返回一个指向目标字符串的指针。
也就是说,strncpy()函数是将 src 指向的前 n 个字符拷贝到 dest 字符数组中:

  • 如果 src 的长度小于 n,strncpy() 函数将在 dest 的剩余部分用空字符填充,凑齐 n 个字符。
  • 如果 src 的长度大于或等于 n,则复制的字符串将不会以空字符结尾。这可能会导致未定义的行为,因为许多字符串操作都依赖于空字符来识别字符串的结尾。

例如:我们需要将arr1中的前5个字符复制到arr2中

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "Hello World";
    char arr2[100];
    strncpy(arr2, arr1, 5);
    printf("Source String: %s\n", arr1);
    printf("Destination String: %s\n", arr2);
    return 0;
}

结果

strncpy也可以截取一个字符串中的一段字符串

比如我们使用 strncpy() 函数将源字符串 str 中的第 6 个字符开始的 5 个字符复制到源字符串中,然后使用空字符将字符串截断。最终结果为"World"。

需要注意的是,strncpy() 函数复制的字符数必须小于或等于源字符串的长度,否则可能会导致未定义的行为。

#include <stdio.h>
#include <string.h>
int main()
{
	char str[] = "Hello World";
	strncpy(str, str + 6, 5);
	str[5] = '\0';
	printf("Result: %s\n", str);
	return 0;
}

运行结果


 

四,strcpy的模拟实现

在c语言中,我们定义一个字符数组arr1将字符串储存在字符数组中。字符数组本质上是一个指向字符的指针。因此我们可以使用指针来实现字符串的复制操作。

#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* p = dest;
	while(*src!='\0')
	{
		*dest++ = *src++;
		
	}
	*dest = '\0';
	
}

int main()
{
	char arr1[] = "wanglongbao";
	char arr2[100];
	my_strcpy(arr2, arr1);
	printf("arr1=%s\n", arr1);
	printf("arr2=%s\n", arr2);
	return 0;
}

运行结果

五,strcat的模拟实现

#include<stdio.h>
#include<assert.h>
void my_strcat(char* dest, const char* scr)
{
	assert(dest && scr);
	while (*dest != '\0')
	{
		dest++;
	}
	while (*scr != '\0')
	{
		*dest++ = *scr++;
	}
	*dest = '\0';

}
int main()
{
	char arr1[] = "wanghongbao";
	char arr2[] = "jiayou";
	my_strcat(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发之SwiftUI

iOS开发之SwiftUI 在iOS开发中SwiftUI与Objective-C和Swift不同&#xff0c;它采用了声明式语法&#xff0c;相对而言SwiftUI声明式语法简化了界面开发过程&#xff0c;减少了代码量。 由于SwiftUI是Apple推出的界面开发框架&#xff0c;从iOS13开始引入&#xff0c;Apple使用…

时间戳的转换-unix时间戳转换为utc时间(python实现)

import datetimetimestamp = 1711358882# 将时间戳转换为UTC时间 utc_time = datetime.datetime.utcfromtimestamp(timestamp)# 格式化并输出时间 formatted_time = utc_time.strftime(%Y-%m-%d %H:%M:%S) print(formatted_time)同样:UTC如何转换为unix时间戳 from datetime …

P6技巧:对计划执行纠偏措施

前言 对施工计划的滞后原因分析&#xff0c;通常采取由大到小、由高到低的方法。即首先查看总体进度偏差&#xff0c;再分析其偏差主要来源于哪部分。 项目进度评估与偏差控制 项目实施过程中&#xff0c;项目控制人员应对进度实施情况进行跟踪、采集数据&#xff0c;并根据…

OC高级编程 第3章:Grand Central Dispatch

3.1 Grand Central Dispatch (GCD)概要 3.1.1什么是GCD Grand Central Dispatch&#xff08;GCD&#xff09;是异步执行任务的技术之一。一般将应用中记述线程管理用的代码在系统级中实现。开发者只要定义想执行的任务并追加到Dispatch Queue中&#xff0c;GCD就能生成必要的…

5 IOC/DI注解开发

文章目录 3&#xff0c;IOC/DI注解开发3.1 环境准备3.2 注解开发定义bean步骤1:删除原XML配置步骤2:Dao上添加注解步骤3:配置Spring的注解包扫描步骤4&#xff1a;运行程序步骤5:Service上添加注解步骤6:运行程序知识点1:Component等 3.2 纯注解开发模式3.2.1 思路分析3.2.2 实…

Linux下对线程的认识+生产消费者模型+信号量

线程的概念 线程是进程内部中更加轻量化的一种执行流。线程是CPU调度的基本单位&#xff0c;而进程是承担系统资源的实体。就是说一个进程中可能会有多个线程&#xff0c;而在Linux内核中并没有真正重新的创建线程并重新进行资源分配&#xff0c;因为我们每个线程指向的资源都是…

mac电脑下安装和启动nginx

一,安装homebrew 必须安装了homebrew&#xff0c;可在终端输入命令brew -v查看是否已经安装,没安装的话安装一下: 如果未安装先安装&#xff08;网上很多文章&#xff09; 二,查看nginx是否存在 使用命令:brew search nginx查看nginx是否存在: 不存在的话,就使用brew inst…

Java螺旋折线

题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点 (X,Y)&#xff0c;我们定义它到原点的距离dis(X,Y) 是从原点到 (X,Y) 的螺旋折线段的长度。 例如 dis(0,1)3&#xff0c;dis(−2,−1)9。 给出整点坐标 (X,Y)&#xff0c;你能计算出 dis(X,Y) 吗&#xf…

HCIA实验

实验目的&#xff1a; 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能再对其进行任何配置&#xff1b; 2、R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合理分配&#xff1b; 3、R1、R2、R4&#x…

如何着手写一个自己的网站管理客户端

WebHole 项目地址 https://gitee.com/yiyefangzhou24/web-hole 是什么&#xff1f;能干什么&#xff1f; WebHole是一款网站管理软件&#xff0c;类似但不同于菜刀、冰蝎、蚁剑&#xff0c;能通过C/S的工作模式&#xff0c;方便的管理服务器的文件、数据库&#xff0c;并执…

自定义类型(2)

1联合体 1.1 联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所 以联合体也叫&#xff1a;共⽤体。 给联合体其…

基于springboot+vue的流浪动物管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

2核4G服务器最多支持多少用户同时在线?

腾讯云轻量应用服务器2核4G5M配置性能测评&#xff0c;腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;并发数10&#xff0c;支持每天5000IP人数访问&#xff0c;腾讯云百科txybk.com整理2核4G服务器支持多少人同时在线&#xff1f;并发数测试、CPU性能、内存性能、…

软件测试|使用selenium进行多窗口操作

简介 在我们进行自动化测试的工作中&#xff0c;经常会点击某个元素或者链接就会自动打开一个新页面&#xff0c;需要我们转到新打开的页面去进行操作&#xff0c;这个时候我们就需要能够自动切换到新页面进行后续的操作&#xff0c;selenium同样支持这个功能&#xff0c;本文…

我们的服务器安全护卫——德迅卫士

德迅卫士 德迅卫士采用自适应安全架构&#xff0c;有效解决传统专注防御手段的被动处境&#xff0c;为系统添加强大的实时监控和响应能力&#xff0c;帮助企业有效预测风险&#xff0c;精准感知威胁&#xff0c;提升响应效率&#xff0c;保障企业安全的最后一公里。 德迅卫士…

python初级第一次作业

一、 dayint(input("enter today day")) fdayint(input("enter num of day since today")) c((fday%7)day)%7 if c0:print("sunday") elif c1:print("monday") elif c2:print("tuesday") elif c3:print("wendnsday&quo…

算法打卡day16

今日任务&#xff1a; 1&#xff09;513.找树左下角的值 2&#xff09;112.路径总和 3&#xff09;113.路径总和Ⅱ 4&#xff09;106.从中序与后序遍历序列构造二叉树 5&#xff09;105.从前序与中序遍历序列构造二叉 513.找树左下角的值 题目链接&#xff1a;513. 找树左下角…

【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程

培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急…

MCGS学习——运行策略与脚本程序

语法讲解 运行策略&#xff1a;脚本的编程环境启动策略&#xff1a;在进入运行环境后首先运行的策略&#xff0c;只运行一次&#xff0c;一般完成系统初始化的处理循环策略&#xff1a;按照用户指定的周期时间&#xff0c;循环执行策略块内的内容&#xff0c;通常用来完成流程…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布,并上传镜像到阿里镜像私仓

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布&#xff0c;并上传镜像到阿里镜像私仓一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、…