strncpy函数的使用和模拟实现

news2024/12/23 1:31:17

e8539b3addfd4272b580ea6bc7050702.png

目录

 1.头文件

 2.strncpy函数功能

2.1情况二:

3.strncpy函数(模拟实现)


方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!


 1.头文件

strncpy函数的使用需要包括头文件<string.h>

#include<string.h>

 2.strncpy函数功能

cf35f6fa0bee4026b225f5bc863a14e0.png

简述:strncpy函数是一种用于复制字符串内容的函数

strncpy函数接收两个地址参数,和一个size_t类型的参数(这里指的是多少个字节),这里以图片讲解,第一个地址名为destination,第二个地址名为source

我们知道,字符串只要给出其中一个字符的地址,那系统就会顺藤摸瓜出这个地址之后所有的字符

strncpy的作用就是从第二个地址所对应的字符开始,总共复制num个字节的内容,粘贴到第一个地址所对应的字符串里

示例如下:

0d103f18deab452dadad36a05ac6296c.png

需要注意的是,strncpy函数在复制时不会自动补上'\0',我们可以看到,我们只复制了两个字节的内容,如果补上了'\0',那么字符'c'就会被替换成'\0'

strncpy函数让复制几个字节就复制几个字节,不会多给你添任何东西


2.1情况二:

如果想要复制的字节个数,arr2中不够呢?

比如:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = { "abcexxxxxkkkkk" };//5个x 5个k
	char arr2[] = { "ghj" };
	int sz = strlen(arr1);//sz = 14;
	strncpy(arr1, arr2, 7);
	for (int i = 0; i < sz; i++) {
		printf("%c ", arr1[i]);
	}
}

这样会打印什么?

当使用strncpy函数时,如果源字符串(arr2)的大小不够 num,那就会在复制完arr2后,一直补充0,直到凑够num个,示例如下:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = { "abcexxxxxkkkkk" };//5个x 5个k
	char arr2[] = { "ghj" };
	int sz = strlen(arr1);//sz = 14;
	strncpy(arr1, arr2, 7);
	//arr2只有4个(arr2中的'\0'可以复制上去),距离7字节还差3个字节
	//arr1 : ghj\0\0\0\0xxkkkkk
	for (int i = 0; i < sz; i++) {
		printf("%c ", arr1[i]);
	}
	//打印出 : ghj\0\0\0\0xxkkkkk
}

 截图示意:

a3bd238282bc43cc8f060a3e7f8f0c42.png


3.strncpy函数(模拟实现)

代码如下:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
void my_strncpy(char* arr1, char* arr2, size_t num, size_t sz2) {
	int kd = sz2;
	if (num <= sz2) {
		while (num--) {
			*arr1++ = *arr2++;
		}
	}
	//足够的情况
	//不足够的情况下,一样复制,剩下的补0
	else {
		while (sz2--) {
			*arr1++ = *arr2++;
			//sz2 = 4, gbcexxxxx
			//sz2 = 3,ghcexxxxx
			//sz2 = 2,ghjexxxxx
			//sz2 = 1,ghj xxxxx
			//sz2 = 0,ghj ?xxxx
			//sz2 = -1
            //while (sz2--) 在最后一次迭代时,sz2 的值为 0,依然会使循环体执行一次,但之后将 sz2 递减到 -1,从而退出循环。           
		}
        
		if (sz2 == -1) {
			//sz2会等于-1
			while (num - kd > 0) {
				//7-4 == 3,想执行三次,那每一次kd++
				*arr1++ = '\0';
				//ghj  xxxx
				//ghj   xxx
				//ghj    xx
				kd++;
			 }
			
		}
		
	}

}

int main()
{
	char arr1[] = { "abcexxxxx" };//5个x
	char arr2[] = { "ghj" };
	int sz2 = strlen(arr2);//arr2的个数
	int sz = strlen(arr1);
	my_strncpy(arr1, arr2,7,sz2+1);
	//想复制7个,那就多出3个0,应该打印ghj\0\0\0\0xx
	for (int i = 0; i < sz; i++) {
		printf("%c ", arr1[i]);
	
	}
}

8fdd48caf53e46a897fd8a5554dbb454.png

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

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

相关文章

Windows系统好用软件推荐

uTools uTools官网&#xff1a;https://u.tools/download/ 功能介绍&#xff1a; 内置许多有用的插件、快速打开应用、复制图片保存等

4457E/4457F/4457G/4457K数字示波器

KEYSIGHT是德 4457E/4457F/4457G/4457K数字示波器 4457系列数字示波器共4个产品型号&#xff0c;产品带宽从1GHz到4GHz&#xff0c;采样率10GSa/s、20GSa/s&#xff0c;垂直分辨率8bit&#xff0c;存储深度2Gpts&#xff0c;最快波形捕获率120万个波形/秒&#xff0c;独创的An…

LIN帧显隐性电平和字节传输顺序理解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

干耳屎硬掏不出来怎么办?质量最好的可视挖耳勺推荐

干耳朵的朋友都会有这样子的困扰&#xff0c;耳朵中的耳屎太硬挖不出来。用铁耳勺去挖会疼&#xff0c;还容易因为操作不当弄伤耳膜。而用棉签掏耳&#xff0c;只有越推越进去。所以当耳屎弄不出来是可以用专业的工具来挖取。市面上的可视挖耳勺通过内窥镜观察耳道中的情况。但…

电脑文件被删如何找回?选它,文件恢复又快又全面!

在我们的日常工作和生活中&#xff0c;文件是无比重要的存在。它可能是您精心撰写的报告&#xff0c;可能是珍贵的照片回忆&#xff0c;也可能是多年积累的工作资料。然而&#xff0c;有时一个不小心&#xff0c;文件可能就被我们删除了&#xff0c;那种焦急和无奈想必您也曾体…

解锁阿尔茨海默病(AD)靶点密码,开启靶向治疗新篇章

前 言&#xff1a; 阿尔茨海默病&#xff08;AD&#xff09;是一种严重的神经退行性疾病&#xff0c;多发于高龄人群&#xff0c;主要表现为记忆、思维、分析判断、视空间辨认、情绪等障碍。从实验室到临床应用的过程充满挑战。阿尔茨海默症新型疗法的开发主要聚焦于靶向Aβ、…

Percona Toolkit 神器全攻略(性能类)

Percona Toolkit 神器全攻略&#xff08;性能类&#xff09; Percona Toolkit 神器全攻略系列共八篇&#xff0c;前文回顾&#xff1a; 前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略&#xff08;实用类&#xff09;Percona Toolkit 神器全攻略&#xff08;配…

STM32+FATFS+SD卡+RTC(生成.CSV格式文件)

一、简介 实验目的&#xff1a;在SD卡上挂载文件系统&#xff0c;实时记录压力传感器采集到的数据&#xff1b;且在表格第一排记录采集时间&#xff1b; 因为前面文章包含了除RTC之外的所有的代码&#xff0c;此文章只放RTC代码。 二、工程源码 RTC.c #include "sys.h…

人工智能|集成学习——混合专家模型 (MoE)

随着 Mixtral 8x7B (announcement, model card) 的推出&#xff0c;一种称为混合专家模型 (Mixed Expert Models&#xff0c;简称 MoEs) 的 Transformer 模型在开源人工智能社区引起了广泛关注。在本篇博文中&#xff0c;我们将深入探讨 MoEs 的核心组件、训练方法&#xff0c;…

arcgisPro绘制平行线、垂直线段

1、绘制一条线 2、点击【创建要素】按钮&#xff0c;选择线&#xff0c;点一个点后&#xff0c;将鼠标移至需要对其的线上&#xff0c;并右击&#xff0c;选择【平行】 3、移动一段距离后&#xff0c;完成绘制&#xff0c;可得到一条平行线 4、得到平行线 5、绘制垂直线&#x…

一文读懂:区块链的原理、技术、应用领域

引言 在当今数字化时代&#xff0c;区块链技术已经成为全球范围内备受瞩目的话题。从金融到供应链&#xff0c;从物联网到数字身份&#xff0c;区块链正在以惊人的速度渗透到各个行业&#xff0c;并在重塑着我们的社会和经济格局。 区块链最初因其作为比特币背后技术的而引起…

OrionX vGPU研发测试场景下最佳实践之SSH模式

开发机场景概述 目前很多企业在做AI开发的场景时&#xff0c;对GPU资源的管理都是非常简单粗暴的。他们大多都是以开发小组为管理单位、由运维以台为单位分配给开发工程师使用。而在AI开发中涉及开发的场景和测试的场景&#xff0c;很多是将开发测试甚至训练任务都放在一起来使…

<<编码>> 第 11 章 逻辑门电路--门电路 示例电路

作为门电路的继电器开关电路 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch11-06-relay-as-gate.txt 作为反相器的继电器开关电路 …

EPON光模块介绍

EPON光模块在依靠光纤网络实现快速可靠的数据传输、增强带宽能力和提高网络效率的过程中发挥着至关重要的作用。在这篇文章中&#xff0c;我们将深入研究EPON光模块的基本概念、各种类型、优点和局限性&#xff0c;全面了解它们在现代电信中的重要性。 EPON光模块的定义 EPON…

ZYNQ 入门笔记(二):动态时钟

文章目录 1 概述1.1 DRP1.2 AXI4-Lite 2 示例2.1 单时钟输出2.2 多时钟输出 3 参考文档 1 概述 Clocking Wizard 可通过配置内部寄存器动态调整输出频率&#xff0c;配置接口可选 DRP 或 AXI4-Lite&#xff0c;其中 AXI4-Lite 实际上是对 DRP 接口的封装 1.1 DRP 通过 DRP 接…

Python文件操作:上下文管理器(with语句)②

文章目录 1. 上下文管理器概述1.1 什么是上下文管理器&#xff1f;1.2 为什么使用上下文管理器&#xff1f;1.3 with语句的基本语法 2. 文件操作中的上下文管理器2.1 使用with语句打开文件2.2 读取文件2.2.1 读取整个文件内容2.2.2 逐行读取文件 2.3 写入文件2.3.1 覆盖写入2.3…

JavaWeb使用web.xml配置Servlet路径映射的相关操作以及易错问题分析与解决

前言 我们在使用Servlet创建JavaWeb项目时&#xff0c;想要绑定url路径和Servlet的映射关系&#xff0c;需要在web.xml中配置映射关系。Servlet从2.5版本开始支持注解。具体来说&#xff0c;Servlet 2.5引入了注解配置方式&#xff0c;使得Servlet应用程序的配置更加简单、灵活…

文档智能:OCR+Rocketqa+layoutxlm

此次先记录LayoutLMv2&#xff0c;梳理相关论文&#xff0c;记录如下&#xff1a; 首先认识一下 visually-rich document understanding tasks → \to → VrDU 其次&#xff0c;the text fields of interest&#xff0c;与图像识别的感兴趣区域 region of Interest 类似&…

MySQL数据的增删改查(一)

目录 新增&#xff08;create&#xff09; 插入单条记录 插入多条记录 查询&#xff08;retrieve&#xff09; 查询所有列 查询特定列 查询字段为表达式 别名 去重 排序 按单列排序 按多列排序 使用表达式或别名排序 排序NULL值 条件查询 比较运算符 逻辑运算…

双向dfs,多次dfs

前言&#xff1a;这个答案给我们提供了一种多次dfs的思路&#xff0c;记录queue的size&#xff0c;每次只取size个&#xff0c;就刚刚好只处理了上一次的‘ 题目地址 #include<bits/stdc.h> using namespace std;//定义队列节点 struct node {int x,y; }rear,front; //Q[…