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;
}

运行结果

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

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

相关文章

【HDFS】DatanodeAdminBackoffMonitor退役节点极慢的问题定位

一、现象: 下节点特别慢。10台节点,每台大约需要退役60w个块。但是3个小时才退役了3000多个块。 NN侧如下日志,可以看到30秒只退役了512-494 = 20个块,这要是退役600w个块,得猴年马月? 2024-03-19 14:44:42,952 INFO org.apache.hadoop.hdfs.server.blockmanagement.D…

浅析扩散模型与图像生成【应用篇】(十一)——DDIBs

11. Dual Diffusion Implicit Bridges for Image-to-Image Translation 该文提出一种双扩散隐式桥&#xff08;Dual Diffusion Implicit Bridges&#xff0c; DDIBs&#xff09;方法用于图像转换&#xff0c;其最大的特点在于处理源域图像的模型和处理目标域图像的模型是彼此分…

华为防火墙二层墙(VAN/SVI/单臂路由)

二层墙只能做地址池形式的NAT。 交换机安全策略防火墙二层墙 路由器安全策略防火墙三层墙 交换机的光口是不能直接插线的&#xff0c;光模块&#xff0c;包括进和出 长距离&#xff1a;单模 短距离&#xff1a;多模 防火墙自身的ping流量需要单独配置

一篇复现Docker镜像操作与容器操作

华子目录 Docker镜像操作创建镜像方式1docker commit示例 方式2docker import示例1&#xff1a;从本地文件系统导入示例2&#xff1a;从远程URL导入注意事项 方式3docker build示例1&#xff1a;构建镜像并指定名称和标签示例2&#xff1a;使用自定义的 Dockerfile 路径构建镜像…

Unity连接MySQL踩坑,问题处理记录

用的unity2021版本&#xff0c;MySQL是官方下载的最新版8.0.36. 安装MySQL时&#xff0c;过去如果安装过&#xff0c;一定要删干净&#xff0c;单纯的卸载不行&#xff0c;网上有很多教程。 MySQL安装完成后&#xff0c;将安装目录的MySql.Data.dll文件放入unity项目的Plugin…

数据运营常用的8大模型

✅作者简介&#xff1a;《数据运营&#xff1a;数据分析模型撬动新零售实战》作者、《数据实践之美》作者、数据科技公司创始人、多次参加国家级大数据行业标准研讨及制定、高端企培合作讲师。 &#x1f338;公众号&#xff1a;风姑娘的数字视角&#xff0c;免费分享数据应用相…

202447读书笔记|《围炉夜话》——多记先正格言,胸中方有主宰 闲看他人行事,眼前即是规箴

202447读书笔记|《围炉夜话》——多记先正格言&#xff0c;胸中方有主宰&#xff1b;闲看他人行事&#xff0c;眼前即是规箴 围炉夜话 《围炉夜话&#xff08;读客三个圈经典文库&#xff09;》作者王永彬。读《围炉夜话》&#xff0c;可以掌握君子安身立业的大智慧&#xff01…

【Canvas与艺术】暗蓝网格汽车速度仪表盘

【关键点】 采用线性渐变色&#xff0c;使上深下浅的圆有凹下效果&#xff0c;使上浅下深的圆有凸起效果&#xff0c;两者结合就有立体圆钮的感觉。 【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type&quo…

2015年认证杯SPSSPRO杯数学建模C题(第二阶段)荒漠区动植物关系的研究全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 C题 荒漠区动植物关系的研究 原题再现&#xff1a; 环境与发展是当今世界所普遍关注的重大问题, 随着全球与区域经济的迅猛发展, 人类也正以前所未有的规模和强度影响着环境、改变着环境, 使全球的生命支持系统受到了严重创伤, 出现了全球变暖…

R语言基础入门

1.保存或加载工作空间 改变工作目录——进行文件读写&#xff0c;默认去指定文件进行操作。&#xff08;使用R时&#xff0c;最好先设定工作目录&#xff08;setwd(),getwd()&#xff09;&#xff09; setwd(“工作文件路径”)&#xff1a;建立工作目录 getwd&#xff08;&…

【STM32嵌入式系统设计与开发】——9Timer(定时器中断实验)

这里写目录标题 一、任务描述二、任务实施1、ActiveBeep工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;USART1初始化函数(usart1_init())&#xff08;3&#xff09;USART数据发送函数&#xff08; USART1_Send_Data&#xff08;&…

【论文阅读】Probabilistic Imputation for Time-series Classification with Missing Data

Probabilistic Imputation for Time-series Classification with Missing Data 论文链接&#xff1a;https://icml.cc/virtual/2023/poster/23522 作者&#xff1a;SeungHyun Kim Hyunsu Kim EungGu Yun Hwangrae Lee Jaehun Lee Juho Lee 机构&#xff1a;韩国科学技术…

Qt登录页面

#include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget) {ui->setupUi(this);//接收动图QMovie *mv new QMovie(":/pictrue/luori.gif");ui->loglab->setMovie(…

修复编译RK3568-buildroot时提示不能使用root权限编译的问题

问题 使用 rk3568 的 sdk 中的 buildroot 来编译根文件系统的时候&#xff0c;出现 "you should not run configure as root (set FORCE_UNSAFE_CONFIGURE1 in environment&#xff09;" 的错误。 解决方法 根据错误提示&#xff0c;我们将 set FORCE_UNSAFE_CON…

算法打卡day16

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

如何在软件测试行业走的更远?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 时间往前推10年&#xff0c;IT业如日中天。 其中测试更是一个极具包容性的行业。那些希望在技术…

【云开发笔记No.9】Kanban与敏捷开发

Kanban看板起源于丰田。 看板&#xff08;Kanban&#xff09;一词来自日文&#xff0c;本义是可视化卡片。如下图所示&#xff0c;看板工具的实质是&#xff1a;后道工序在需要时&#xff0c;通过看板向前道工序发出信号——请给我需要数量的输入&#xff0c;前道工序只有得到看…

Orangedx:引领新一轮 BTCFi 浪潮

“OrangeDx 作为新一轮 BTCFi 浪潮引领者被市场寄予厚望 &#xff0c;前不久在 FinceptorApp 的平台的公开销售 20 万美元的额度仅在几秒售罄&#xff0c;而其即将以 Startup 方式登陆 Gate 平台也同样备受市场期待。” 自 Ordinals 面向市场为比特币生态带来全新的资产发行方案…

翻过DP这座大山

1.AcWing 跳台阶 第一种方法:暴力搜索DFS #include <iostream> using namespace std;int dfs(int n) {if(n 1) return 1;else if(n 2) return 2;else return dfs(n-1)dfs(n-2); }int main() {int x; cin>>x;cout<<dfs(x)<<endl;return 0; }显然如…

银河麒麟系统安装设备类型选择lvm简单模式之后,数据写入导致失败导致系统重启无法正常加载

银河麒麟系统安装设备类型选择lvm简单模式之后&#xff0c;数据写入导致失败导致系统重启无法正常加载 一 系统环境1.1 系统版本信息1.2 通过镜像安装的过程中选择设备类型选择的是lvm简单模式 二 问题描述三 问题修复过程3.1 挂载ISO镜像&#xff0c;引导到字符终端界面3.2 修…