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.rhkb.cn/news/286087.html

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

相关文章

C语言动态内存的管理

前言 本篇博客就来探讨一下动态内存&#xff0c;说到内存&#xff0c;我们以前开辟空间大小都是固定的&#xff0c;不能调整这个空间大小&#xff0c;于是就有动态内存&#xff0c;可以让我们自己选择开辟多少空间&#xff0c;更加方便&#xff0c;让我们一起来看看动态内存的有…

使用html做一个2048小游戏

下载地址: https://pan.xunlei.com/s/VNtiF13HxmmE4gglflvS1BUhA1?pwdvjrt# 提取码&#xff1a;vjrt”

前端基础 Vue -组件化基础

1.全局组件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&…

React Developer Tools安装

问题描述 在react开发中&#xff0c;需要插件来帮助我们开发&#xff0c;例如&#xff1a; 方法 &#xff08;可能需要魔法 进去后搜索&#xff1a; 点击下载即可

【OpenModelica】1 OpenModelica项目架构

1 OpenModelica项目架构 文章目录 1 OpenModelica项目架构一、 架构总览图二、OpenModelica各部分作用 一、 架构总览图 OpenModelica 环境由几个相互连接的子系统组成&#xff0c;如图 1.1 所示。 其中包括&#xff1a; MDT Eclipse 插件图形模型编辑器/浏览器文本模型编辑器…

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

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

瑞_Redis_商户查询缓存_什么是缓存

文章目录 项目介绍1 短信登录2 商户查询缓存2.1 什么是缓存2.1.1 缓存的应用场景2.1.2 为什么要使用缓存2.1.3 Web应用中缓存的作用2.1.4 Web应用中缓存的成本 附&#xff1a;缓存封装工具类 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的实战篇的商户查询缓…

C++11特性--统一的列表初始化

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 {} 初始化及std:initializer_list 一 这种初始化方式我们建议用第一种&#xff0c;但是以后看见下面两种也不要感到疑惑&#xff0c;是可以这样初始化的。 int main() {int a 1;int b { 1 };int c{ 1 };return 0; } 二…

【Flutter 面试题】讲解一下Flutter中的动画和过渡效果

【Flutter 面试题】讲解一下Flutter中的动画和过渡效果 文章目录 写在前面口述回答补充说明运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#xff0c;51CTO专…

Facebook如何使用增强技术提升广告效果?

AR in AD - case study 脸书2021年宣布了引入AR的新方法&#xff0c;以推动其应用套件中的产品发现和购买。但他们首先考虑是技术。据脸书称&#xff0c;技术一直是增强现实在其应用程序中更广泛使用的主要障碍。这就是为什么它现在正在做出改变&#xff0c;使企业主和广告商更…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-第几个幸运数字

幸运数字是可以被3,5,7任一整除的数字&#xff0c;列举小明号码内的所有可能组合并计数。注意别忘了把1占的一位减去。 #include<stdio.h> typedef long long ll; int main(){long long ans 0, n 59084709587505LL;for(ll i 1; i < n; i * 3){//计算小于等于n的数…

22.保护性暂停扩展(一对一)

如果需要多个类之间使用GuardedObject对象&#xff0c;作为参数传递不是很方便&#xff0c;因此设计一个解耦的中间类&#xff0c;这样不仅能够解耦结果的等待者和结果生产者&#xff0c;还能够支持多个任务的管理。 Futures就好比居民楼一层的信箱&#xff0c;每个信箱有房间的…

玩具蛇(蓝桥杯)

文章目录 玩具蛇题目描述答案&#xff1a;552dfs 玩具蛇 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有一条玩具蛇&#xff0c;一共有 16 节&#xff0c;上面标着数字 1 至 16。每一节都是一个正方形的形…

蓝桥杯算法心得——附近最小(优先队列+滑动窗口)

大家好&#xff0c;我是晴天学长&#xff0c;这题可以用贪心优先队列和滑动窗口来写&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .附近最小 问题描述 小蓝有—个序列a[1], a[2],...,a[n]。 给定—个…

单目深度估计基础理论和论文学习总结

单目深度估计基础理论和论文学习总结 一、背景知识&#xff1a; 三维刚体运动的数学表示&#xff1a;旋转平移矩阵、旋转向量、欧拉角、四元数、轴角模型、齐次坐标、各种变换等 照相机模型&#xff1a;单目/双目模型&#xff0c;单目中的世界坐标系/相机坐标系/图像坐标系的…

一、初识 Web3

瑾以此系列文章&#xff0c;献给那些出于好奇并且想要学习这方面知识的开发者们 在多数时间里&#xff0c;我们对 web3 的理解是非常模糊的 就好比提及什么是 web1 以及 web2&#xff0c;相关概念的解释是&#xff1a; 1. 从 Web3 的开始 Web3&#xff0c;也被称为Web3.0&…

【排序算法】插入排序与选择排序详解

文章目录 &#x1f4dd;选择排序是什么&#xff1f;&#x1f320;选择排序思路&#x1f309; 直接选择排序&#x1f320;选择排序优化&#x1f320;优化方法&#x1f309;排序优化后问题 &#x1f320;选择排序效率特性 &#x1f309;插入排序&#x1f320;插入排序实现 &#…

shardingsphere-elastic-job-ui 管理界面安装

shardingsphere-elasticjob 从 3.0.0-alpha 版本开始&#xff0c;将console管理界面单独拆分出来 下载前需要 安装 maven 配置环境变量 安装 nodejs 配置环境变量 下载ui源码,安装 官方并未直接提供可执行的二进制文件,需要下载源码编译,目前发行版 3.0.2 https://github.com/…

修改网站源码,给电子商城的商品添加图片时商品id为0的原因

修改网站源码&#xff0c;给电子商城的商品添加图片时商品id为0的原因。花了几个小时查找原因。后来&#xff0c;由于PictureControl.class.php是复制CourseControl.class.php而来&#xff0c;于是对比了这两个文件&#xff0c;在CourseControl.class.php找到了不一样的关键几条…

探索AI大模型学习的未来发展与挑战

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 AI大模型学习的理论基础 AI大模型的训练与优化 AI大模型在特定领域的应用 AI大模型学习的伦理与社会影响 未来发展趋势与挑…