【C语言】strcpy与strncpy函数的使用和模拟实现

一.strcpy的使用与模拟实现

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

使用注意事项:

• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷贝到目标空间。
• 目标空间必须足够大,以确保能存放源字符串。
• 目标空间必须可修改。

#include <stdio.h>
#include <string.h>
int main()
{char dest[10];const char *src = "hello";strcpy(dest, src);printf("复制的字符串:'%s'\n", dest);return 0;
}

模拟实现:

char *my_strcpy(char *dest, const char*src)
{char *ret = dest;assert(dest != NULL);assert(src != NULL);while((*dest++ = *src++)){;}return ret;
}

        strcpy 不检查目标缓冲区的大小,因此如果目标缓冲区不够大,可能会导致缓冲区溢出,这是一个严重的安全风险。建议使用 strncpy并指定最大复制长度,以避免这种风险。

二.strncpy的使用与模拟实现

char * strncpy ( char * destination, const char * source, size_t num ); 

使用注意事项:

  • 拷贝num个字符从源字符串到目标空间。
     
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
    #include <stdio.h>
    #include <string.h>
    int main()
    {char dest[10];const char *src = "hello world";strncpy(dest, src, 5);dest[5] = '\0'; // 注意:必须手动添加终止空字符// 现在 dest 是 "hello"return 0;
    }

模拟实现

char *my_strncpy(char *dest, const char *src, size_t n) {char *dest_save = dest;while (n && *src) {*dest++ = *src++;n--;}while (n--) {*dest++ = '\0'; // 如果 n 大于 src 字符串的长度,填充剩余位置为空字符}return dest_save;
}

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

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

相关文章

如何从不同维度对服务进行拆分

1.压力模型 高频高并发 商品详情页 低频突发流量 如秒杀 批量上架 2.主链路规划 不可缺少的环节 如果缺少了就无法形成完整的服务 如图营销计算就是一个服务业务 3.领域模型拆分DDD 4.用户群体拆分 2C 2B

【.net/.net core】使用System.Web.HttpUtility.UrlDecode处理web请求编码问题

问题场景&#xff1a;将数据已JSON字符串写入请求内容后&#xff0c;在接收端接收数据时&#xff0c;数据内容为URL编码后的内容&#xff0c;需要先将接收的字符串数据URL解码后才可转换为数据对象 解决办法&#xff1a;使用System.Web.HttpUtility.UrlDecode(string s)方法对…

自恋型人格如何调整

目录 1. 假期后无法快速投入工作,走不出被需求的陷阱1.1 与他人分享对调节自恋型人格有何帮助1.2 自恋型人格的一起其他问题1. 假期后无法快速投入工作,走不出被需求的陷阱 感受到被需要和价值的重要性是人之常情,尤其对于自恋型性格的人来说,这种感觉可能会更加强烈。 假…

CCF CSP试题编号: 202312-2试题名称: 因子化简

题目中提到关键词素数 我们可以尝试求一下1000以内的素数 足以表示数据 int a[1000]{0}; a[0]a[1]1;for(int i3;i<1000;i){for(int j2;j<i;j){if(i%j0){a[i]1;}}}for(int i0;i<1000;i){if(a[i]!1)cout<<i<<",";} 将素数存入数组 即可以按照题…

爬虫基本原理介绍、实现以及问题解决

爬虫基本原理介绍、实现以及问题解决 一、爬虫的意义 1. 前言 爬虫作为网络数据采集的重要工具&#xff0c;在当今互联网时代具有不可替代的作用。通过爬虫&#xff0c;我们可以获取到丰富的网络数据&#xff0c;用于各种用途&#xff0c;包括数据分析、业务决策、舆情监测等…

springboot整合swagger,postman,接口规范

一、postman介绍 1.1概述 工具下载 Postman&#xff08;发送 http 请求的工具&#xff09; 官网&#xff08;下载速度比较慢&#xff09;&#xff1a;Download Postman | Get Started for Free 网盘下载&#xff1a;百度网盘 请输入提取码 1.2Http 请求格式 请求地址请求方法状…

VsCode 配置go开发环境之下载go tools

ctrl shift P 选择 go install/update tools&#xff0c;下载go tools 报错&#xff0c; 提升dial err。 将GOPROXY 和 GOSUMDB 按照如下配置&#xff0c;重启IDE即可成功下载 set GOPROXYhttps://goproxy.cn set GOSUMDBoff

jupyter中pip安装包会安装到别的环境。

文章目录 1. 查看jupyter当前环境和默认环境的路径和python版本2.安装包到正确的环境 如果你在 Jupyter Notebook 中使用 pip 安装包&#xff0c;它默认会将包安装到 Jupyter Notebook 所在的Python 环境。这可能会导致安装的包与你期望的环境不匹配。 1. 查看jupyter当前环境和…

麒麟系统Redis7.2哨兵集群部署

redis哨兵集群部署 1、原理 Redis 哨兵模式是指在 Redis 集群中,有一组专门的进程(即哨兵进程)负责监控主节点和从节点的状态,并在发现故障时自动进行故障转移,以保证 Redis 集群的高可用性。 Redis 提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵进程会周期性地向主…

App的测试,和传统软件测试有哪些区别?增加哪些方面的测试用例

从上图可知&#xff0c;测试人员所测项目占比中&#xff0c;App测试占比是最高的。 这就意味着学习期间&#xff0c;我们要花最多的精力去学App的各类测试。也意味着我们找工作前&#xff0c;就得知道&#xff0c;App的测试点是什么&#xff0c;App功能我们得会测试&#xff0…

如何通过小程序上的产品力和品牌力提升用户的复购能力?

随着网络购物小程序的发展以及内容电商、社交电商、垂直电商、品牌自营等多个细分类型的出现&#xff0c;小程序成为用户日常购物、大促囤货以及首发抢购的重要场景&#xff0c;市场竞争也逐渐激烈。如何在用户侧获得更多转化、留存与复购&#xff0c;成为企业品牌日益关注的话…

第七课-----分支切平面

割平面方法的基本思想是对于一个优化问题而言&#xff0c;通过不断添加约束条件来切割可行域&#xff0c; 最终将可行域不断变小&#xff0c;相当于搜索空间变小。在LP中讲过&#xff0c;一个等式约束就等价于一个超平面&#xff0c;一个不等式约束就代表一个半空间&#xff0c…

编程语言的生态系统

目录 编程语言的生态系统C语言的生态系统Rust的生态系统 编程语言的生态系统 编程语言的生态系统是指与该编程语言相关的一系列工具、框架、库、社区和资源的集合。它包括了开发者使用该编程语言所需的一切支持和资源。编程语言的生态系统通常包括以下几个方面&#xff1a; 编…

【TB作品】MSP430,单片机,Proteus仿真,数字音乐盒,蜂鸣器音乐仿真

文章目录 题目要求如何根据简谱编曲仿真图代码介绍宏定义部分全局变量部分LCD 控制函数按键检测和处理函数蜂鸣器控制函数主函数部分 获取代码和仿真 题目要求 86 数字音乐盒的制作 1 设计要求 制作一个数字音乐盒,盒内存有3首乐曲,每首不少于30s。采用LCD显示乐曲信息, 开机时…

移动零 - LeetCode 热题 4

大家好&#xff01;我是曾续缘&#x1f48b; 今天是《LeetCode 热题 100》系列 发车第 4 天 双指针第 1 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素…

展开说说:Android之SharedPreferences

SharedPreferences 是一种轻量级的数据持久化存储机制。以key/value键值对形式存储在xml文件&#xff0c;用于保存一些应用程序数据。保存在 /data/data/PACKAGE_NAME/shared_prefs/xxx.Xml文件。 SharedPreferences 只能存储string&#xff0c;int&#xff0c;float&#xff…

【洛谷 P8661】[蓝桥杯 2018 省 B] 日志统计 题解(滑动窗口+优先队列+双端队列+集合)

[蓝桥杯 2018 省 B] 日志统计 题目描述 小明维护着一个程序员论坛。现在他收集了一份“点赞”日志&#xff0c;日志共有 N N N 行。其中每一行的格式是 ts id&#xff0c;表示在 t s ts ts 时刻编号 i d id id 的帖子收到一个“赞”。 现在小明想统计有哪些帖子曾经是“热…

C#实现约瑟夫环算法

目录 1.约瑟夫环定义 2.约瑟夫环算法实现需要注意的地方 3.通过一个例子来演示这个过程 4.三人的约瑟夫环示例 4.十二人的约瑟夫环示例 1.约瑟夫环定义 约瑟夫环即设有n个人坐成一个圈&#xff0c;从某个人开始报数&#xff0c;数到m的人出列&#xff0c;接着从出列的下一…

每日一题:LeetCode1.两数之和

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任…

matlab 电机仿真平台GUI

1、内容简介 略 74-可以交流、咨询、答疑 2、内容说明 略 电机仿真平台GUI 包含直流机要加调电压启动、回馈制动、串电阻调速 异步电动机要加串电阻启动、星三角启动、回馈制动模块 3、仿真分析 略 4、参考论文 略