当前位置: 首页 > news >正文

C语言-strncmp strncat strncpy长度受限制的字符串函数

strncmp strncat strncpy长度受限制的字符串函数

首先 我们需要知道 这几个的语法格式差不多 

这里传递的size_t的长度是传递的字节长度 不是个数 也就这里int*是四个字节 char*是一个字节 如果是整数进行交换 。此时也就需要20个字节,这样可以交换五个整数

这里差异只是多一个参数 也就是size_t sz长度参数

strncpy(拷贝)

这里只是多一个字节长度

这里拷贝三个

这里是让拷贝几个就拷贝几个 没有’\0‘

这里拷贝8个 这里是不足八个 加上'\0'

strncpy代码的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
void my_strncpy(char* str1, char* str2, size_t sz)
{assert(str1 && str2);while (sz > 0)//这里是字节交换 每次sz会进行减少一个字节{*str1 = *str2;//这里进行复制str1++; //各自向后移动str2++;sz--;//字节每次减少1 }
}
int main()
{char arr1[] = "dfhguil";char arr2[100] = { 0 };my_strncpy(arr2, arr1, 3);printf("%s", arr2);return 0;
}

strncat(拼接)

举例1

这里是追加三个字节

举例2

这里是追加3个 从前往后走进行追加 把该追加的追加之后 会放一个字符串

举例3

把该追加的追加之后 加上字符串0 之后就不继续添加了

strncat的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
void my_strncat(char* str1, char* str2, size_t sz)
{assert(str1 && str2);//这里使用一个断言 也就是只要不是空指针 就可以继续运行while (*str1 != '\0')//这里是先找到第一个数组的'\0'然后跳出循环str1++;while (sz != 0)//其次和之前的循环方式一样 每次减少一个字节 ++ 把数值赋给arr1 但是这里需要知道 这里是常量字符串 所以需要arr1 的空间大于arr2{*str1 = *str2;str1++;str2++;sz--;}*str1 = '\0';//最后是把'\0'放到字符串的结尾
}
int main()
{char arr1[100] = "hello ";char arr2[] = "bitttt";my_strncat(arr1, arr2, 3);printf("%s", arr1);return 0;
}

strncmp(比较)

这里是比较前两个字节  

在给定 的长度范围内进行比较

这里你让我拷贝 我就进行拷贝 存在越界访问的情况

这里拷贝出来 但是程序崩溃了

strncmp的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strcmp(char* str1, char* str2, size_t sz)
{assert(str1 && str2);while (*str1 == *str2)//这里代码循环的条件就是只要相等就继续++ 然后遇见最后一个字符'\0'自然会跳出循环{if (sz == 0)//这里每次循环的时候会进行sz的-- 也就是对照字符的-- 如果不满足相等的条件 此时也就会跳出循环{return 0;}str1++; str2++;sz--;}return *str1 - *str2;//while (*str1 == *str2 && sz > 0)//{//	str1++; //	str2++;//	sz--;//}//return sz == 0 ? 0:(*str1 - *str2);//这里是使用一个三目操作符 如果满足sz循环 也就是返回0  不然就是返回差值 这样也是允许的}int main()
{char arr1[100] = "hello ";char arr2[] = "bitttt";int ret = my_strcmp(arr1, arr2, 3);printf("%d", ret);return 0;
}

 

代码使用的总结

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
int main()
{//拼接限制函数的使用  这里拼接三个char arr1[100] = "slaidg ";char arr2[] = "dfilsug ";strncat(arr1, arr2, 3);printf("%s\n\n", arr1);//拷贝限制函数的使用 这里拷贝五个char arr3[] = "slaidg ";char arr4[100] = { 0 };strncat(arr4, arr3, 5);printf("%s\n\n", arr4);//比较函数的使用char arr5[] = "slaidg ";char arr6[] = "dfilsug ";char arr7[] = "slaidg ";int ret1 = strcmp(arr5, arr6, 3);//不相同 1   前三位比较的时候上面的大 arr5大int ret2 = strcmp(arr5, arr7, 3);//相同   0   前三位一样大printf("%d\n%d\n", ret1, ret2);
}

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

相关文章:

C语言-strncmp strncat strncpy长度受限制的字符串函数

strncmp strncat strncpy长度受限制的字符串函数 首先 我们需要知道 这几个的语法格式差不多 这里传递的size_t的长度是传递的字节长度 不是个数 也就这里int*是四个字节 char*是一个字节 如果是整数进行交换 。此时也就需要20个字节&#xff0c;这样可以交换五个整数 这里差…...

ROS Kinetic通信编程:话题、服务、动作编程

文章目录 一、话题编程二、服务编程三、动作编程 接上篇&#xff0c;继续学习ROS通信编程基础 一、话题编程 步骤&#xff1a; 创建发布者 初始化ROS节点向ROS Master注册节点信息&#xff0c;包括发布的话题名和话题中的消息类型按照一定频率循环发布消息 创建订阅者 初始化…...

还原wps纯粹的编辑功能

1.关闭稻壳模板&#xff1a; 1.1. 启动wps(注意不要乱击稻壳模板&#xff0c;点了就找不到右键菜单了) 1.2. 在稻壳模板选项卡右击&#xff1a;选不再默认展示 2.关闭托盘中wps云盘图标&#xff1a;右击云盘图标/同步与设置&#xff1a; 2.1.关闭云文档同步 2.2.窗口选桌面应用…...

【烹饪】清炒菠菜的学习笔记

1 焯水&#xff1a;15s左右即可 Kimi教授 菠菜含有草酸&#xff0c;与含钙丰富的食物共煮时可能会形成草酸钙&#xff0c;影响钙的吸收&#xff0c;因此在烹饪时通常建议先用开水烫一下菠菜以减少草酸含量。 2 可选调料&#xff1a;鸡精...

AcWing 4964.子矩阵

首先就是运用了暴力的思路&#xff0c;能够过个70%的数据&#xff0c;剩下的直接时间超时了&#xff0c;没办法优化了。 讲一下暴力的思路&#xff1a; 其实就是模拟而已&#xff0c;也就是看作想要找的矩阵为一个小窗口&#xff0c;然后不断移动的事而已。 #include<ios…...

代码随想录算法训练营第day20|530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 力扣题目链接 (opens new window) 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 提示&#xff1a;树中至少有 2 个节点。 二叉搜索树是一颗有序的树&#xff0c;可以通过中…...

Hystrix的原理及应用:构建微服务容错体系的利器(二)

本系列文章简介&#xff1a; 本系列文章旨在深入剖析Hystrix的原理及应用&#xff0c;帮助大家理解其如何在微服务容错体系中发挥关键作用。我们将从Hystrix的核心原理出发&#xff0c;探讨其隔离、熔断、降级等机制的实现原理&#xff1b;接着&#xff0c;我们将结合实际应用场…...

【nuget】如何移动 nuget 缓存文件夹

如何移动 nuget 缓存文件夹 一、了解NuGet包的默认存放路径二、为什么需要修改NuGet包的默认存放路径?使用下面的命令查看本地包位置三、更改下载的NuGet包存储位置四、修改VS离线包引用地址五、验证修改的新路径是否成功默认情况下,NuGet下载的包存放在系统盘(C盘中),这样一…...

H266开源视频编码器VVENC现状

VVenC 是由 Fraunhofer HHI 研究团队开发的&#xff0c;主要是视频编码系统组。HHI 是欧洲最大的研究组织 Fraunhofer 协会的成员&#xff0c;该协会是德国的一个大型非营利性组织。源代码在&#xff1a; https://github.com/fraunhoferhhi/vvenc VVenC几乎与H.266视频标准同时…...

unity webgl怎么获取当前页面网址

在Unity WebGL中&#xff0c;你可以使用Javascript和C#的互操作性来获取当前页面的网址。以下是如何实现的步骤和示例代码&#xff1a; 首先&#xff0c;你需要创建一个Javascript脚本来获取当前页面的网址。&#xff08;简单方法为&#xff1a;创建xxx.txt&#xff0c;修改文件…...

深度学习神经网络训练环境配置以及演示

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 1 NVIDIA Dr…...

[嵌入式AI从0开始到入土]16_ffmpeg_ascend编译安装及性能测试

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…...

HTML5:七天学会基础动画网页11

CSS3动画 CSS3过渡的基本用法: CSS3过渡是元素从一种样式逐渐改变为另一种样式的效果。 过渡属性-transition 值与说明 transition-property 必需&#xff0c;指定CSS属性的name&#xff0c;transition效果即哪个属性发生过渡。 transition-duration 必需&#xff0c;t…...

考虑开发容器的 6 个理由

虽然在容器环境内进行开发的行为可以追溯到 2010 年代中期&#xff0c;但开发容器本身在过去一年中已经开始流行。微软在 2022 年推出了开发容器规范&#xff0c;推动了这一概念的发展&#xff0c;而 Docker 在去年夏天也紧随其后&#xff0c;推出了开发环境功能的测试版。 开…...

Python基础入门 --- 1-2.字面量

文章目录 Python基础入门第一章&#xff1a;1.1 第一个python程序 第二章 &#xff1a;2.1 字面量2.2 常用的值类型2.3 字符串2.3.1 三种定义方式2.3.2 引号嵌套2.3.3 字符串拼接2.3.4 字符串格式化2.3.5 格式化的精度控制数字精度控制&#xff1a; 2.3.6 字符串格式化方式22.3…...

华为云计算hcie认证考什么?华为hciie认证好考吗

1.理论知识&#xff1a;HCIE认证首先要求考生具备扎实的云计算理论基础&#xff0c;包括云计算的基本概念、架构、关键技术、安全管理等方面的知识。考生需要深入理解云计算的核心原理&#xff0c;以及华为云计算产品的特点和优势。 2.实践技能&#xff1a;除了理论知识外&…...

redis spring cache

数据库的数据是存储在硬盘上的&#xff0c;频繁访问性能较低。如果将一些需要频繁查询的热数据放到内存的缓存中&#xff0c;可以大大减轻数据库的访问压力。 SpringCache SpringCache提供基本的Cache抽象&#xff0c;并没有具体的缓存能力&#xff0c;需要配合具体的缓存实现…...

图解I/O中的零拷贝技术

什么是零拷贝&#xff1f; 零拷贝是一种计算机系统中的 I/O 优化技术&#xff0c;它的核心思想是在数据传输过程中尽可能地减少或完全避免 CPU 将数据从一个存储区域复制到另一个存储区域的操作&#xff0c;从而减少了上下文切换和 CPU 拷贝时间&#xff0c;提高了系统的性能和…...

【设计模式】Java 设计模式之桥接模式(Bridge)

桥接模式&#xff08;Bridge Pattern&#xff09;是结构型设计模式的一种&#xff0c;它主要解决的是抽象部分与实现部分的解耦问题&#xff0c;使得两者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;因为该模式涉及如何组合接口和它们的实现。将抽象部分与实现…...

记录dockers中Ubuntu安装python3.11

参考&#xff1a; docker-ubuntu 安装python3.8,pip3_dockerfile ubuntu22 python3.8-CSDN博客...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...