strcpy函数

文章目录

  • strcpy函数描述
  • 函数使用
  • 总结
  • 目标空间为什么必须可变?
  • 模拟实现

strcpy函数描述

在这里插入图片描述
重点:including the terminating null character (and stopping at that point).意为拷贝的值包括停止字符
传参时第一个参数为要拷贝参数,第二个参数为被拷贝参数

函数使用

#include<stdio.h>
#include<string.h>int main() {char str1[20] = "abcdefg";char str2[] = "zxcv";strcpy(str1, str2);printf("%s\n", str1);return 0;
}

结果:
在这里插入图片描述
拷贝之后:
在这里插入图片描述
可知在拷贝时‘\0’也被拷贝过来了。
2.
//提前结束被拷贝的字符串

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<string.h>int main() {char str1[20] = "abcdefg";char str2[] = "zxcvv\0bnm";strcpy(str1, str2);printf("%s\n", str1);return 0;
}

结果:
在这里插入图片描述
拷贝后的结果:
在这里插入图片描述

总结

1.目标空间必须足够大且可变
2.结束字符也会被拷贝过去
3源字符串必须以‘\0’结束

目标空间为什么必须可变?

错误示例:

#include<stdio.h>
#include<string.h>int main() {char* p = "abcdefg";char str2[] = "zxcv";strcpy(p, str2);printf("%s\n", *p);return 0;
}

目标字符串常量字符串不允许被修改,必须写成数组的形式

模拟实现

#include<stdio.h>
#include<assert.h>char* my_strcpy(char* dest,const char* src)
{//函数返回值为目标空间的起始地址,*dest++ = *src++会改变dest的地址,所以要先保存char* ret = dest;assert(src && dest);while (*dest++ = *src++) //加到最后先把结束字符拷贝过去,然后在判定循环是否可以再运行{;}return ret;
}int main() {char str1[20] = "xxxx";char str2[] = "abcdefghi";my_strcpy(str1, str2);printf("%s\n", str1);return 0;
}

所传参数为地址,所以两个参数都要进行判空操作,都不能为空指针

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

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

相关文章

springMVC中统一异常处理@ControllerAdvice

1.在DispatcherServlet中初始化HandlerExceptionResolver 2.controller执行完成后执行processDispatchResult(processedRequest,response,mappedHandler,mv,dispatchException),有异常则处理异常 3.ExcepitonHandlerExceptionResolver中执行方法doResolveHandlerMethodExceptio…

【vSphere 8 自签名 VMCA 证书】企业 CA 签名证书替换 vSphere VMCA CA 证书Ⅰ—— 生成 CSR

目录 替换拓扑图证书关系示意图说明 & 关联博文1. 默认证书截图2. 使用 certificate-manager 生成CSR2.1 创建存放CSR的目录2.2 记录PNID和IP2.3 生成CSR2.4 验证CSR 参考资料 替换拓扑图 证书关系示意图 本系列博文要实现的拓扑是 说明 & 关联博文 因为使用企业 …

Linux tmux使用总结

文章目录 1 tmux介绍2 tmux概念会话Sessions、窗口Windows、面板Panesstatus line中字段含义 3 Sessions会话管理新建会话断开当前会话进入之前的会话关闭会话查看所有的会话 4 tmux快捷指令系统指令窗口&#xff08;Windows&#xff09;指令面板&#xff08;Panes&#xff09;…

如何利用示波器解析I2C数据

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘校园大使&#xff0c;湖南区域的日常实习&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &am…

API网关与社保模块

API网关与社保模块 理解zuul网关的作用完成zuul网关的搭建 实现社保模块的代码开发 zuul网关 在学习完前面的知识后&#xff0c;微服务架构已经初具雏形。但还有一些问题&#xff1a;不同的微服务一般会有不同的网 络地址&#xff0c;客户端在访问这些微服务时必须记住几十甚至…

冲刺学习-MySQL-基础

基础 数据类型 常见数据类型的属性 整型 TINYINT、SMALLINT、MEDIUMINT、INT&#xff08;INTEGER&#xff09;和 BIGINT 可选属性 M&#xff1a;表示显示宽度&#xff08;从MySQL 8.0.17开始&#xff0c;整数数据类型不推荐使用显示宽度属性&#xff09;UNSIGNED&#xff1…

【c++】简单了解运算符重载

引例 class Integer{ public:Integer(int num):_num(num){}int& getValue(){return _num;} private:int _num; };现在有两个Integer对象a,b。想让a和b相加得到的结果给对象c&#xff0c;现在可以肯定的是cab编译后肯定会报错 请注意这条信息no match for operator (oper…

家庭燃气表微信抄表识别系统

1.背景需求 目前家里燃气度数的读数上报&#xff0c;每个月在社区微信群里面将手机拍摄的燃气表读数截图&#xff08;加住址信息水印&#xff09;&#xff0c;发到群里给抄表员。 2.总体设计 设计目标 功能一&#xff1a;手机上随时可以远程采集读数图片&#xff08;自动加住…

Uniapp 酷炫钱包页面模板 直接引用

使用教程 直接引用Vue页面 即可 <template><view><TCqianbao></TCqianbao></view> </template> <script>import TCqianbao from /uni_modules/TC-qianbao/pages/index.vueexport default {components:{TCqianbao},} </script&…

云服务器搭建Hadoop分布式

文章目录 1.服务器配置2.Java环境3. 安装Hadoop4. 集群配置5. 编写集群的启动脚本 1.服务器配置 服务器主机名配置115.157.197.82s110核115.157.197.84s210核115.157.197.109s310核115.157.197.31s410核115.157.197.60gracal10核 所有的软件安装在/opt/module下&#xff0c;软…

GIL全局解释器锁

文章目录 GIL全局解释器锁一、引入&#xff1a;二、常用的Python解释器种类有哪些&#xff1f;1、CPython2、IPython3、PyPy4、Jython5、IronPython 三、GIL介绍四、GIL与Lock五、GIL与多线程总结 GIL全局解释器锁 一、引入&#xff1a; 首先要明白&#xff0c;GIL并不是Pyth…

工作中几个问题的思考

对于需要并行多公司并行处理的任务&#xff0c;方案是什么&#xff1f; 多线程、并行流、并发库&#xff08;ExecutorService、Futrue、Callable&#xff09;&#xff0c;分布式计算&#xff08;1&#xff09;按照公司ID分片 &#xff08;2&#xff09;按照业务类型分片 处理…