C字符串和内存函数介绍(二)——长度不固定的字符串函数

前面我们一起学习了strlen,strcpy,strcmp,strcat的使用以及它们的模拟实现,它们的特点是你传参的时候,传过去的是数组首元素的地址,然后无论是计算长度,实现拷贝,相互比较还是进行追加,处理的对象的都是整个字符串。

但是有时候我们的需求可能仅仅只是针对字符串的一部分实现拷贝,进行比较和追加的相关逻辑,也就是待处理的字符串的长度不应该只是默认的“整个字符串”,有时候让我们的用户来决定可能会更好。据此,引入了今天我们的三大主角,它们分别是:

strncpy进行长度不固定的字符串的拷贝,拷贝多少用户说了算!
strncmp进行长度不固定的字符串的比较,比较哪一部分字符用户说了算!
strncat进行长度不固定的字符串的追加,追加多少字符用户说了算!

接下来,让我们一一来对它们进行认识。

注:这一部分函数的学习我们仅需要对函数各个使用场景有所了解即可,模拟实现不再是重点。

(一)strncpy函数:

介绍:

函数原型:

char * strncpy ( char * destination, const char * source, size_t num );
函数名功能描述头文件
strncpysource中前num个字符拷贝到目标空间destination#include<string.h>

返回值说明:返回的是目标空间destination的地址。

注意事项:

第一、strncpy函数不会在拷贝的最后自动带上'\0',如果拷贝给destination的字符串中本没有'\0',同时destination本身也没有'\0',那destination的内容是什么这是不可知的。如图所示:

我们推介的写法是下面这种的:

第二、如果参数num>source中已有的字符个数,则多出来的部分会用'\0'进行填补追加,直至num个。值得注意的是:这个过程不受destination本身长度的限制,也就是说如果num>strlen(destination)程序会出现问题——数组的越界访问。

(二)strncmp函数:

介绍:

函数原型:

int strncmp ( const char * str1, const char * str2, size_t num );
函数名功能描述头文件
strncmp从左到右依次比较str1str2的前num个字符的ASCLL码值#include<string.h>

返回值说明:是一个整数,用于表示str1和str2的大小关系。详情见下表:

return value含义
<0表明str1 < str2
=0表明str1 == str2
>0表明str1 > str2

(三)strncat函数:

介绍:

函数原型:

char * strncat ( char * destination, const char * source, size_t num );
函数名功能描述头文件
strncatsource字符串中前num个字符追加到destination后面,并加'\0'#include<string.h>

注意事项:

  1. 目标空间destination的内存务必足够大,至少能同时放下source和destination两个字符串内容的数据。
  2. 越界追加的问题:即如果num>strlen(souce),函数也仅对souce本身进行追加,不会过度追加。
  3. 和strcat不同的是,由于strncat函数的特殊机制,strncat函数一般是允许自己追加自己的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VR法治教育展厅互动体验突破了地域限制

VR全景互动展厅搭建编辑器以其卓越的特点、强大的功能及实际应用中的显著优势&#xff0c;成为企业级VR应用的得力助手。这款软件不仅能够制作逼真的虚拟场景&#xff0c;更能让用户沉浸其中&#xff0c;体验前所未有的真实感。 它拥有高度逼真的视觉效果&#xff0c;采用先进的…

基于微信小程序+ JAVA后端实现的【微信小程序跑腿平台】设计与实现 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 《微信小程序跑腿平台的设计与实现》 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信小程序, HTML…&#xff08;其它相关技术&#xff09; …

obsidian Excalidraw 更换字体 最新版 手写字体

背景 Excalidraw 是 obsidian 中最厉害的插件之一&#xff0c;长期霸占插件排行榜第一。以其强悍的性能和灵活的可塑性受到大家的喜爱&#xff0c;可默认的字体对中文并不友好&#xff0c;网上大多数教程要不是过时了&#xff0c;要不是错的&#xff0c;还有就是太复杂&#x…

SpringBoot+layuimini实现角色权限菜单增删改查(layui扩展组件 dtree)

角色菜单 相关组件方法效果图MySQL代码实现资源菜单树组件实现权限树方法js这里我先主要实现权限树的整体实现方法&#xff0c;如果是直接查看使用的话可以只看这里&#xff01; 后端代码Controlle层代码Service代码及实现类代码Service代码ServiceImpl代码 resourceMapper 代码…

C# --- 浮点数类型 float, double, decimal

C# --- 浮点数类型 float, double, decimal float, double, decimaldecimal float, double, decimal decimal double 和 float 的采用base 2, 不能精确的表示浮点数, 进行加减乘除的操作的时候会出现精度丢失的问题decimal 采用base 10&#xff0c;可以精确的表示浮点数&#x…

智慧树下做游戏

游戏开发工程师致力于游戏总体设计 &#xff0c;负责游戏开发工具和运营维护工具的设计与开发 &#xff0c;并配合主程序完成游戏架构及各大功能的设计、开发、调试和其他技术支持 就业方向&#xff1a; 一般有客户端游戏开发和服务器游戏开发 客户端开发&#xff1a; 主要负…

Linux 中的进程优先级管理

在 Linux 系统中&#xff0c;理解和管理进程优先级是维护系统性能的关键因素。本文将详细介绍进程优先级&#xff08;priority&#xff09;的基本概念、如何查看和调整进程优先级&#xff0c;以及 nice 值对优先级的影响。 基本概念 在多任务操作系统中&#xff0c;CPU 资源的…

MySQL事务篇2:InnoDB引擎

InnoDB是MySQL的默认存储引擎&#xff0c;支持ACID事务、行级锁定和外键约束&#xff0c;通过多版本并发控制&#xff08;MVCC&#xff09;实现高并发性能。InnoDB使用聚簇索引存储数据&#xff0c;具备崩溃恢复能力&#xff0c;确保数据一致性和完整性。其主要特性包括数据和索…

今日选题。

诱导读者点开文章的9引真经&#xff08;一&#xff09; 标题重要么&#xff1f;新媒体、博客文通常在手机上阅读。首先所有的内容不同于纸媒&#xff0c;手机只展现标题&#xff0c;而内容都是折叠。其次读者能像看内容一样看4、5条或者7、8条标题&#xff08;区别于不同的主流…

2024年流行效果插件,助你打造非凡设计!

设计图片太普通了&#xff1f;加班挑细节&#xff1f;你不能达到你想要的效果吗&#xff1f;作为一名设计师&#xff0c;你总是无法逃脱这样的噩梦&#xff01;如何改变工作中的类似困境&#xff1f;除了提高自我设计技能外&#xff0c;选择一些辅助效果插件“插件”也非常重要…

CSS 【实战】 “四合院”布局

效果预览 页面要求&#xff1a; 上下固定高度左右固定宽度中间区域自适应宽高整个页面内容撑满全屏&#xff0c;没有滚动条 技术要点 使用 html5 语义化标签 header 网页内的标题区域nav 导航区域aside 侧边栏footer 页脚区域section 内容分区article 文章区域 清除浏览器默…

【实战JVM】-基础篇-02-类的声明周期-加载器

【实战JVM】-基础篇-02-类的声明周期-加载器 3 类的生命周期3.1 生命周期的概述3.2 加载阶段3.2.1 查看内存中的对象 3.3 连接阶段3.3.1 验证阶段3.3.1.1 验证是否符合jvm规范3.3.1.2 元信息验证3.3.1.3 验证语义3.3.1.4 符号引用验证 3.3.2 准备阶段3.3.3 解析阶段 3.4 初始化…

LangChain实战技巧之三:关于Tool的一点拓展

&#xff08;几乎&#xff09;任一LLM在bind_tools时&#xff0c;都是习惯先定义一个Function或BaseTool&#xff0c;然后再bind&#xff08;bind_tools&#xff09;具体方式可参考我的这篇文章 AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会 但这里的tool未必需…

Python代码:十九、列表的长度

1、题目 描述&#xff1a; 牛牛学会了使用list函数与split函数将输入的连续字符串封装成列表&#xff0c;你能够帮他使用len函数统计一些公输入了多少字符串&#xff0c;列表中有多少元素吗&#xff1f; 输入描述&#xff1a; 输入一行多个字符串&#xff0c;字符串之间通过…

猫狗分类识别模型建立①数据标记

一、labelImg库说明 LabelImg是一款非常流行的图像标注工具&#xff0c;广泛用于机器学习和计算机视觉领域。以下是关于LabelImg的详细介绍&#xff1a; 主要功能和特点 1.图像标注 允许用户在图像中标注物体&#xff0c;选择特定区域&#xff0c;并为这些区域添加标签或类…

虚拟列表 vue-virtual-scroller 的使用

npm 详情&#xff1a;vue-virtual-scroller - npm (npmjs.com) 这里我使用的是RecycleScroller。 App.vue <template><RecycleScrollerclass"scroller":items"items":item-size"54"v-slot"{ item }"><list-item :it…

Vue框架动态引入省份个性化代码

项目需求有产品的功能&#xff0c;但是功能下部分小功能每个省份有不同的控制&#xff0c;所以需要引入省份个性化代码。 思路是&#xff0c;页面一开始加载产品化的代码&#xff0c;有个性化的代码就加载个性化的逻辑&#xff0c;个性化代码是产品化代码的重写&#xff0c;所…

网络协议——FTP(简介、搭建FTP服务端)

一、简介 1、什么是FTP&#xff1f; FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09; TCP/IP 协议组的协议之一。常用20&#xff08;数据&#xff09;、21&#xff08;命令&#xff09;端口作为通讯端口。&#xff08;22为SSH端口&#xff09;F…

机器学习入门指南:Jupyter Notebook实战

前言 机器学习作为人工智能领域的核心组成&#xff0c;是计算机程序学习数据经验以优化自身算法、并产生相应的“智能化的“建议与决策的过程。随着大数据和 AI 的发展&#xff0c;越来越多的场景需要 AI 手段解决现实世界中的真实问题&#xff0c;并产生我们所需要的价值。 机…

引力为什么会让时间变慢,给你通俗的解读

爱因斯坦的狭义相对论表明&#xff0c;速度会让时间变慢&#xff0c;速度越快时间就越慢。而广义相对论告诉我们&#xff0c;引力同样会让时间变慢&#xff0c;引力越强时间就越慢。 时间膨胀 速度对时间的影响就先不解释了&#xff0c;之前的科普文章介绍了很多&#xff0c;今…