strcpy函数

news2024/11/19 9:33:11

目录

函数介绍:

函数声明:

具体使用:

情况一:

情况二:

注意事项:

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

2.目标空间必须足够大,以确保能放源字符串:

3.目标空间必须可变:

 4.遇见'\0'便会停下:

strcpy的模拟实现: 


函数介绍:

是将一个字符串复制到另一块空间地址中 的函数,‘\0’是停止拷贝的终止条件,同时也会将 '\0' 也复制到目标空间。

函数声明:

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

   1. 函数的参数:

char* destination---------目标字符串的首地址
const char* source------源地址:被复制的字符串的首地址,用const修饰,避免修改掉被拷贝的字符串。
   2.函数的返回值类型:

char*:返回的是目标字符串的首地址。

具体使用:

情况一:


int main()
{
	char arr[10] = "########";
	printf("%s\n", strcpy(arr, "hello"));

	return 0;
}

输出结果:

情况二:


int main()
{
	char arr1[10] = "**********";
	char arr2[10] = "HELLO";
	printf("%s\n", strcpy(arr1, arr2));
	return 0;
}

输出结果:

注意事项:

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

int main()
{
	char arr1[10] = "**********";
	char arr2[] = { 'b','i','t' };
	printf("%s\n", strcpy(arr1,arr2));
 
	return 0;
}

 代码会出错,因为\0是终止strcpy访问的条件,若没有\0,strcpy会继续遍历,直到在内存中碰见\0为止,这一点和strlen很像,而在找到\0之前,strcpy会拷贝一些乱七八糟的代码。

 

2.目标空间必须足够大,以确保能放源字符串:

int main()
{
	char arr1[3] = "";
	char arr2[] = "hello world";
	printf("%s\n", strcpy(arr1,arr2));
 
	return 0;
}

目标空间不满足拷贝的内容,虽然会拷贝成功,但是程序会崩溃且造成越界访问。 

3.目标空间必须可变:

int main()
{
	char* p = "abcdefg";
	char str[10] = "hijk";
	printf("%s\n", strcpy(p,str));
 
	return 0;
}

 p是字符类型的指针,存放的是常量字符串,不可改变,所以p是不可改变的空间,而目标空间必须是可以被修改的,因为要将拷贝的字符串放在目标空间中。

 4.遇见'\0'便会停下:

int main()
{
	char num[20] ;
    strcpy(num,"zhang\0san");
	printf("%s\n", num);
 
	return 0;
}

 

 之前说过\0是strcpy的终止符,所以在拷贝的过程中要确保\0处在拷贝内容的最尾端。

strcpy的模拟实现: 

char *my_strcpy(char *dest, const char*src) //dest是目标空间,src是拷贝内容
{ 
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
 
 while((*dest++ = *src++)) //将对应位置的拷贝内容传输到目标空间的对应位置
 {
    ;
 }
 return ret;
}

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

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

相关文章

阿里2面:你们部署多少节点?1000W并发,当如何部署?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格,遇到一几个很重要的面试题: 1000W并发,需部署多少个节点?如何觉得部署多少…

<八> objectARX开发:动态拖动Jig创建自定义实体

1、介绍 接上一篇文章,在某些情况下,CAD中的实体对象初始参数并不是固定的,我们需要通过jig动态拖动方式来绘制自定义实体,下面就用一个简单的例子来介绍一下自定义实体动态绘制。   实体形状:包括实体夹点和文字夹点拖动实现。 2、效果 3、源码 static void RYMyGrou…

软考:中级软件设计师:无线网,网络接入技术,ipv6

软考:中级软件设计师:无线网 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &#x…

退出屏保前玩一把游戏吧!webBrowser中网页如何调用.NET方法

本文主要以 HackerScreenSaver 新功能的开发经历介绍 webBrowser中网页如何调用.NET方法的过程。 1. 背景 之前开源了一款名为 HackerScreenSaver 的 Windows 屏保程序。该程序具有模拟黑客炫酷界面的特点,用户可以将自定义的网页作为锁屏界面。不久前,…

1. import pandas as pd 导入库

【目录】 文章目录 1. import pandas as pd 导入库1. pandas库的概念2. 导入pandas库2.1 常规导入2.2 别名导入 3. 别名的作用4. 课堂练习 【正文】 1. import pandas as pd 导入库 【学习时间】 10分钟 1. pandas库的概念 pandas:熊猫panda的复数, …

基于体素形态学测量分析(VBM)的工具包比较及其在年龄预测中的应用

摘要 基于体素的形态学测量分析(VBM)通常用于灰质体积(GMV)的局部量化。目前存在多种实现VBM的方法。然而,如何比较这些方法及其在应用中的效用(例如对年龄效应的估计)仍不清楚。这会使研究人员疑惑他们应该在其项目中使用哪种VBM工具包。本研究以用户为中心&#…

【字节跳动青训营】后端笔记整理-4 | Go框架三件套之GORM的使用

**本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金。 我的go开发环境: *本地IDE:GoLand 2023.1.2 *go:1.20.6 *MySQL:8.0 本文介绍Go框架三…

百万级数据导入导出

导入 引入easyexcel <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency>总结有三种导出方式&#xff1a; 单行读取&#xff0c;单行导入。这种方案最简单…

涛然自得周刊(第06期):韩版苏东坡的突围

作者&#xff1a;何一涛 日期&#xff1a;2023 年 8 月 27 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;不定期发布。历史周刊内容可以看这里。 电影 兹山鱼谱 讲述丁若铨因政治事件被贬黜到了遥远的黑山岛。来到岛上后&#xff0c;丁被大自然环境疗愈&#…

自定义温度显示控件(四) — 终结篇

概述 详细讲述自定义温度控件的实现 详细 前言 在之前的文章中&#xff0c;已经讲到了自定义温度显示控件一步步进化的历程&#xff0c;大家有兴趣的话可参考以下文章&#xff1a; 自定义温度显示控件(一) 自定义温度显示控件(二) 自定义温度显示控件(三) 今天讲温度实现效…

CPU深度解析

操作系统课程 计算机组成 ALU:计算单元(运算器)PC:pc寄存器存执行指令Registers:寄存器存数据MMU:控制器程序的构成:指令+数据 总线:一个程序读入内存,全是由0和1构成,从内存读取到cpu计算,需要通过总线。一段01数据段是指令还是数据是通过来源总线区分的。总线分…

农村农产品信息展示网站的设计与实现(论文+源码)_kaic

摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容&#xff0c;通过计算机网络的开发技术&#xff0c;在互联网上进行展示&#xff0c;然后通过计算机网…

9 串口通信(三)

9.4 USART串口数据包 HEX数据包 1&#xff09;固定包长&#xff0c;含包头包尾 例如陀螺仪的数据&#xff0c;需要XYZ坐标一起打包 2&#xff09;可变包长&#xff0c;含包头包尾 如果定义的包头包尾刚刚好也是数据&#xff0c;这样容易混淆&#xff0c;解决的办法&#x…

java-Optional 类详解

目录 前言 Optional的构造方法 Optional的相关方法介绍 isPresent用法&#xff1a; get用法&#xff1a; filter用法&#xff1a; orElse用法&#xff1a; orElseGet用法 orElseThrow用法 map用法 flatMap用法&#xff1a; 前言 Optional 类是java8的新特性&#xff0…

Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

一、Redis是什么 Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符串)、…

基于springboot学生社团管理系统/基于Java的高校社团管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

130.【Spring注解】

Spring 注解 (一)、AOP功能测试1.AOP 使用步骤(1).导入AOP对应的依赖(2).编写业务逻辑类(3).编写切面类(4).编写配置类(5). 编写测试类 (二)、AOP 原理1.EnableAspectJAutoProxy(1).EnableAspectJAutoProxy源码(2).AspectJAutoProxyRegistrar 自定义注册bean源码(3).打断点进行…

Harbor 私有仓库迁移博客

文章目录 Harbor 私有仓库迁移一.私有仓库迁移的介绍1.为何要对Harbor 私有仓库的迁移2.Harbor 私有仓库的迁移特点3. Harbor 私有仓库的迁移注意要点 二.私有仓库迁移配置1.源Harbor配置&#xff08;192.168.198.11&#xff09;&#xff08;1&#xff09;接着以下操作查看容器…

软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

软考&#xff1a;中级软件设计师:信息系统的安全属性 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准…