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

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

  • 长度受限制的字符串函数
    • strncpy函数
      • strncpy函数的使用
      • strncpy函数的模拟实现
    • strncat函数
      • strncat函数的使用
      • strncat函数的模拟实现
    • strncmp函数
      • strncmp函数的使用
      • strncmp函数的模拟实现

长度受限制的字符串函数

strncpy函数

在这里插入图片描述
strncpy函数是把 src 所指向的字符串复制到 dest,最多复制 num 个字符。当 src 的长度小于 num 时,dest 的剩余部分将用空字节(\0)填充。
dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
num – 要从源中复制的字符数。

strncpy函数的使用

下面展示strncpy函数的使用:

#include <stdio.h>
#include <string.h>int main()
{char src[40];char dest[12];memset(dest, '\0', sizeof(dest));strcpy(src, "This is runoob.com");strncpy(dest, src, 10);printf("最终的目标字符串: %s\n", dest);return(0);
}

编译并运行上面的程序将产生以下结果:
最终的目标字符串: This is ru
strncpy函数具有以下的特点:

1、拷贝num个字符从源字符串到目标空间。
2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

strncpy函数的模拟实现

char* my_strncpy(char* dest, const char* src, int num)
{char* tmp = dest;while (num && (*dest++ = *src++)){num--;}if (num){while (num--){*dest++ = '\0';}}return tmp;
}

strncat函数

在这里插入图片描述
strncat函数把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 num 字符长度为止。
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src – 要追加的字符串。
num – 要追加的最大字符数

strncat函数的使用

下面的实例演示了 strncat函数的用法:

#include <stdio.h>
#include <string.h>int main ()
{char src[50], dest[50];strcpy(src,  "This is source");strcpy(dest, "This is destination");strncat(dest, src, 15);printf("最终的目标字符串: |%s|", dest)return(0);
}

让我们运行上面的程序将产生以下结果:
最终的目标字符串: |This is destinationThis is source|
strncat函数具有以下的特点:

1、dest要有足够的空间。
2、strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’。
3、如果num大于字符串src的长度,那么仅将src全部追加到dest的尾部;如果num小于字符串src的长度,该字符会将src的所有字符附加在dest末尾。无论哪种情况,都会在新字符串的末尾添加空字符。

strncat函数的模拟实现

void my_strncat(char* dest, const char* src, int num)
{char* tmp = dest;char* tmq = (char*)src;assert(dest);assert(src);while (*tmp){tmp++;}while (num--){*tmp = *tmq;tmp++;tmq++;}*tmp = '\0';printf("%s", dest);printf("\n");
}

strncmp函数

在这里插入图片描述
strncmp函数把 str1 和 str2 进行比较,最多比较前 num 个字节。
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。
num – 要比较的最大字符数。
strncmp函数的返回值如下图所示:
在这里插入图片描述
即该函数返回值如下:

如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。

strncmp函数的使用

下面是此函数的strncmp函数的使用例子:

#include <stdio.h>
#include <string.h>int main ()
{char str1[15];char str2[15];int ret;strcpy(str1, "abcdef");strcpy(str2, "ABCDEF");ret = strncmp(str1, str2, 4);if(ret < 0){printf("str1 小于 str2");}else if(ret > 0){printf("str2 小于 str1");}else{printf("str1 等于 str2");}return(0);
}

让我们编译并运行上面的程序,这将产生以下结果:
str2 小于 str1
需要注意的是,字符串大小的比较本质上是根据每个字符的Asall表值大小进行比较得到的,从字符串的第一个字母进行比较,如果相等就依次往后继续比较,直至比较出结果或者遇到\0为止,当然,strncmp函数还有一个限制的要求是比较num个字节,当比较的字节数减为0时也会停止。

strncmp函数的模拟实现

int my_strncmp(const char* str1, const char* str2, int maxlen)
{assert(str1 != NULL);assert(str2 != NULL);int ret = 0;while (!(ret = (*str1 - *str2)) && *str1 && (maxlen--)){str1++;str2++;}if (ret < 0)ret = -1;else if (ret > 0)ret = 1;return ret;
}

那么,今天的长度受限制的字符串函数的相关内容我就讲述完啦,因为个人能力有限,文章难免会出现纰漏,届时有错误可以私信发给我以及时更正,谢谢大家!
请添加图片描述

相关文章:

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

超详细讲解长度受限制的字符串函数&#xff08;保姆级教程&#xff01;&#xff01;&#xff01;&#xff09;长度受限制的字符串函数strncpy函数strncpy函数的使用strncpy函数的模拟实现strncat函数strncat函数的使用strncat函数的模拟实现strncmp函数strncmp函数的使用strncm…...

【c#】c#常用小技巧方法整理(4)——cmd命令提示符,c#调用cmd

CMD命令是一种命令提示符&#xff0c;CMD是command的缩写&#xff0c;位于系统System32的目录下&#xff0c;是大多数Windows操作系统中可用的命令行解释器应用程序。用于执行输入的命令。其中大多数命令通过脚本和批处理文件自动执行任务&#xff0c;执行高级管理功能&#xf…...

在项目中遇到的关于form表单的问题

前言 以下内容都是基于element Plus 和 vue3 一个form-item校验两个下拉框 有时候不可避免会遇到需要一个form-item校验两个下拉框的情况&#xff0c;比如&#xff1a; 这种情况下传统的校验已经无法实现&#xff0c;需要通过form表单提供的自定义校验来实现。以上面的必填…...

德国奔驰、博世和保时捷的员工年薪有多少?

点击 欧盟IT那些事 关注我们公告&#xff1a;因企鹅审核规定&#xff0c;本公众号从《德国IT那些事》更名为《欧盟IT那些事》。从职场新人到总裁&#xff0c;一个个盘。位于德国斯图加特的梅赛德斯-奔驰集团及其子公司梅赛德斯-奔驰是世界最知名的汽车制造商之一。奔驰车代表着…...

Mybatis与微服务注册

目录 一&#xff0c;Springboot整合MybatisPlus 创建商品微服务子模块 二&#xff0c;SpringBoot整合Freeamarker 三、SpringBoot整合微服务 &gateway&nginx 整合微服务之商品服务zmall-product 创建并配置网关gateway服务 安装配置SwitchHosts 安装配置Windo…...

JAVA练习47-合并两个有序数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-合并两个有序数组 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 2月11日练习…...

右键菜单管理 - Win系统

右键菜单管理 - Win系统前言软件工具管理右键菜单360右键管理右键管家前言 Windows系统可以借助软件工具对右键菜单进行管理&#xff0c;可对指定的右键菜单进行删除和恢复。下面以Win10系统为例介绍管理方法。 注意&#xff1a;使用本文提及的工具将某软件的右键菜单删除后&…...

背包问题求方案数、具体方案

背包问题求方案数、具体方案01背包问题求体积恰好等于V的方案数完全背包问题求体积恰好等于V的方案数01背包问题求最优选法的方案数完全背包问题求最优选法的方案数01背包问题求具体方案01背包问题求体积恰好等于V的方案数 原题链接AcWing278. 数字组合 考虑状态表示&#x…...

电商导购CPS,淘宝联盟如何跟单实现用户和订单绑定

前言 大家好&#xff0c;我是小悟 做过自媒体的小伙伴都知道&#xff0c;不管是发图文还是发短视频&#xff0c;直播也好&#xff0c;可以带货。在你的内容里面挂上商品&#xff0c;你自己都不需要囤货&#xff0c;如果用户通过这个商品下单成交了&#xff0c;自媒体平台就会…...

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,

文章目录1.shell语法&#xff1a;Shell是用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁&#xff0c;硬件>内核(os)>shell>文件系统1.1 变量&#xff1a;readonly定义只读变量&#xff0c;unset删除变量1.2 函数&#xff1a;shell脚本传递的参数中包含空格&am…...

刷题记录:牛客NC208250牛牛的最美味和最不美味的零食

传送门:牛客 题目描述: 牛牛为了减&#xff08;吃&#xff09;肥&#xff08;好&#xff09;&#xff0c;希望对他的零食序列有更深刻的了解&#xff0c;所以他把他的零食排成一列&#xff0c;然后对每一 个零食的美味程度都打了分&#xff0c;现在他有可能执行两种操作&…...

微搭低代码从入门到精通08-轮播容器

我们上一篇讲解了基础布局组件&#xff0c;讲解了普通容器和文本组件的用法&#xff0c;本篇我们继续介绍布局组件。 小程序中经常会有个功能是轮播图展示的功能&#xff0c;多张图片可以顺序进行切换。我们学习使用轮播容器的时候&#xff0c;先考虑切换的图片从哪来&#xf…...

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测 目录分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测分类效果基本介绍模型描述程序设计参考文献分类效果 基本介绍 1.Matlab实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测&…...

华为10年经验测试工程师,整理出来的python自动化测试实战

前言 全书共分11章&#xff0c;第一章是基础&#xff0c;了selenium家谱&#xff0c;各种组件之间的关系以及一些必备知识。第二章告诉如何开始用python IDLE写程序以及自动化测试环境的搭建。第三章是webdriver API&#xff0c;我花了相当多时间对原先的文档&#xff0c;冗余…...

OpenCV杂谈 - 如何导出图像到内存中其他结构

前言 最近在net环境使用OpenCV,记录些疑难杂点. ​​​ 一、OpenCV主要结构 Mat 二、Cols,Rows 和 Width,Hight 三、导入\导出到内存中其他结构 四、按矩形 在Mat之间复制 总结 一、OpenCV主要结构 Mat Mat是OpenCV中的主要结构. 主要有两个用途. 1 存储图片信息,2 存…...

Session与Cookie的区别(四)

咖啡寄杯的烦恼 虽然店里生意还可以&#xff0c;但小明无时无刻不想着怎么样发大财赚大钱&#xff0c;让店里的生意变得更好。 他观察到最近好多便利商店开始卖起了咖啡&#xff0c;而且时不时就买一送一或是第二件半价&#xff0c;并且贴心地提供了寄杯的服务。 寄杯就是指说你…...

Linux 文件锁 - fcntl

什么是文件锁&#xff1f; 即锁住文件&#xff0c;不让其他程序对文件做修改&#xff01; 为什么要锁住文件&#xff1f; 案例&#xff0c;有两个程序&#xff0c;都对一个文件做写入操作。 #include <unistd.h> #include <stdio.h> #include <stdlib.h> …...

CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享

%% 二维元胞自动机%imagesc(a)的色度矩阵a中0->256由蓝变黄% 规则&#xff0c;先把中间点置为1&#xff0c;每一时间每一点如果%周围八个点和为偶数&#xff0c;则变为0&#xff0c;为奇数则变为 1% 颜色控制clc, clearMap [1 1 1; 0 0 0];% [0 0 0] is black, [1 1 1] is …...

OpenStack云平台搭建(6) | 部署Neutron

目录 1.在控制节点登录数据库配置 2.要创建服务证书&#xff0c;完成这些步骤 3.创建网络服务API端点&#xff1a; 4.安装网络组件 5.配置neutron组件 6.配置 Modular Layer 2 (ML2) 插件 7.配置Linuxbridge代理 8.配置DHCP代理 9.配置元数据代理 10.编辑/etc/nova/no…...

Lesson 05.Configuring the Oracle Network Environment

Lesson 05. Configuring the Oracle Network Environment 文章目录Lesson 05. Configuring the Oracle Network Environment1. 监听程序的配置文件有哪些&#xff0c;如何命名&#xff0c;保存在什么位置&#xff1f;2. Oracle 网络的服务名称文件是如何命名的&#xff0c;需要…...

软银携手DeltaX建储能基地,2027年量产应对AI算力电力挑战

软银与DeltaX合作&#xff1a;储能系统建设的新布局品玩5月12日消息&#xff0c;据The Elec报道&#xff0c;软银集团选定韩国初创公司DeltaX&#xff0c;负责在日本大阪建设数据中心储能系统&#xff08;ESS&#xff09;的开发与制造。双方计划于今年下半年在大阪堺市原夏普工…...

4 生成器模式

生成器模式 的核心是&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。简单说&#xff1a;像搭积木一样&#xff0c;用相同的步骤可以搭出不同样式的房子。建造房子的步骤是固定的&#xff1a;打地基建墙体安装屋顶装修内部但…...

构建企业级日志监控系统:Visual Syslog Server技术架构深度解析

构建企业级日志监控系统&#xff1a;Visual Syslog Server技术架构深度解析 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 在当今复杂的IT基础设施环境中&#…...

Hermit:项目级环境隔离工具,告别开发环境冲突

1. 项目概述&#xff1a;从“隐士”到现代开发者的效率革命如果你和我一样&#xff0c;常年与终端为伴&#xff0c;每天在多个项目、不同编程语言和工具链之间切换&#xff0c;那你一定对那种“环境错乱”的痛楚深有体会。前一秒还在用 Python 3.11 调试一个数据脚本&#xff0…...

基于MCP协议与HaE工具构建AI安全情报助手实战指南

1. 项目概述&#xff1a;一个为安全工程师量身定制的“情报雷达”如果你是一名安全工程师、渗透测试人员或者负责企业安全运营的从业者&#xff0c;那么你一定对“信息收集”和“威胁情报”这两个词深有体会。每天&#xff0c;我们都需要从海量的数据源中——无论是公开的漏洞库…...

技术深度解析CoverM在PacBio HiFi宏基因组测序数据覆盖率分析中的应用

技术深度解析CoverM在PacBio HiFi宏基因组测序数据覆盖率分析中的应用 【免费下载链接】CoverM Read alignment statistics for metagenomics 项目地址: https://gitcode.com/gh_mirrors/co/CoverM CoverM作为一款专门用于计算基因组覆盖率的生物信息学工具&#xff0c;…...

STM32实战:手把手教你用Cubemx配置交流充电桩的CP信号检测(附代码)

STM32实战&#xff1a;从零构建充电桩CP信号检测系统 充电桩作为新能源汽车基础设施的核心组件&#xff0c;其通信协议的可靠性直接关系到充电安全。在实际工程中&#xff0c;CP&#xff08;Control Pilot&#xff09;信号的检测往往是开发者的第一个技术拦路虎。我曾在一个海外…...

VESC驱动无刷电机入门避坑:从看不懂ChibiOS源码到5分钟搞定CAN通讯

VESC驱动无刷电机入门避坑&#xff1a;从看不懂ChibiOS源码到5分钟搞定CAN通讯 第一次接触VESC驱动无刷电机时&#xff0c;面对满屏的ChibiOS源码和复杂的CAN通讯协议&#xff0c;很多嵌入式新手都会感到无从下手。特别是当你已经能用VESC Tool让电机转起来&#xff0c;但想通过…...

AI智能体构建实战:从架构设计到工程落地的关键挑战与解决方案

1. 项目概述&#xff1a;揭开AI智能体构建的隐秘面纱 “构建AI智能体”&#xff0c;这听起来像是当下最酷、最前沿的技术话题。无论是科技新闻还是行业论坛&#xff0c;你都能看到无数关于智能体如何自动化工作流、理解复杂指令、甚至自主决策的激动人心的讨论。然而&#xff0…...

Unity实战:用RenderTexture和LineRenderer搞定3D物体擦除效果(附完整Shader代码)

Unity实战&#xff1a;用RenderTexture和LineRenderer实现高精度3D物体擦除效果 在游戏开发中&#xff0c;3D物体的动态擦除效果常被用于刮刮乐、迷雾探索、橡皮擦等交互场景。传统实现方式往往面临性能瓶颈或视觉效果不佳的问题。本文将深入探讨如何结合RenderTexture和LineRe…...