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.mzph.cn/web/17190.shtml

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

相关文章

拓展虚拟世界边界,云手机可以做到吗

虚拟世界&#xff0c;AI&#xff0c;VR等词汇是21世纪最为流行的词汇&#xff0c;在科技背后&#xff0c;这些词汇的影响变得越来越大&#xff0c;已经走进了人们的世界&#xff0c;比如之前APPLE发布的vision pro&#xff0c;使人们能够更加身临其境的体验到原生os系统&#x…

如何理解Spring Boot自动配置原理和应用?

我们知道&#xff0c;基于Spring Boot&#xff0c;我们只需要在类路径中引入一组第三方框架的starter组件&#xff0c;就能在Spring容器中使用这些框架所提供的各项功能。这在当下的开发过程中已经习以为常&#xff0c;但在Spring Boot还没有诞生之前却是不可想象的。如果我们使…

这款信创FTP软件,可实现安全稳定的文件传输

信创&#xff0c;即信息技术应用创新&#xff0c;2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;国家将信创产业纳入国家战略&#xff0c;并提出了“28n”发展体系。“8”具体指金融、石油、电力、电信、交通、航空航天、医院、教育等主要行业。目前企业使用比较…

0527_C++1

练习1&#xff1a; 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream>using namespace std; namespace my_space {string s1"hello world";void my_strreverse…

对比表征学习(一)Contrastive Representation Learning

对比表征学习&#xff08;二&#xff09;Sentence Embedding 主要参考翁莉莲的Blog&#xff0c;本文主要聚焦于对比损失函数 对比表示学习&#xff08;Contrastive Representation Learning&#xff09;可以用来优化嵌入空间&#xff0c;使相似的数据靠近&#xff0c;不相似的数…

数据结构(四)双向链表

文章目录 一、概念二、无头双向链表示意图三、操作&#xff08;一&#xff09;定义结构体&#xff08;二&#xff09;创建链表1. 函数定义2. 注意点3. 代码实现 &#xff08;三&#xff09;插入1. 函数定义2. 注意点3. 代码实现 &#xff08;四&#xff09;删除1. 函数定义2. 注…

B端:ElementUI、AntDesign、若依等看腻了,来点不一样的。

现在对ElementUI、AntDesign和若依这些 UI 框架感到厌倦了&#xff0c;本次给大家分享一些更加个性化的UI界面。

干货|图生代码实例整理,让你的代码更高效

前言 “图生代码”。这项新功能允许开发人员直接利用产品设计图一键生成相应的代码&#xff0c;极大地提高了编程效率和研发速度。甚至会未来软件开发可能迎来一场革命性的变革。但图生代码究竟能直到什么程度&#xff1f;本文结合一款图生代码的实例程序整理了一些有代表意义…

C语言 数组——排序算法的函数实现

目录 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序

期望薪资30k字节java2面,A给B转账的同时B给A转账怎么并发量最高

一面 1、自我介绍 2、详细介绍一下自己的做的项目&#xff1f;根据项目提了一些问题 3、hashmap原理 4、B树原理&#xff1f; 5、final禁止重排序原理&#xff1f; 6、设计一个榨汁机类&#xff0c;面向对象怎么设计&#xff1f; 7、get、post区别&#xff0c;使用场景&…

已解决ModuleNotFoundError : No module named ‘pandas亲测有效!!!

已解决ModuleNotFoundError : No module named ‘pandas亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 报错问题解决思路解决方法 报错问题 在运行Python代码时&#xff0c;你可能会遇到以下报错信息&#xff1a; ModuleNotFoundError: No module named pandas这个…

华为昇腾310B初体验,OrangePi AIpro开发板使用测评

0、写在前面 很高兴收到官方的OrangePi AIpro开发板测试邀请&#xff0c;在过去的几年中&#xff0c;我在自己的博客写了一系列有关搭载嵌入式Linux系统的SBC&#xff08;单板计算机&#xff09;的博文&#xff0c;包括树莓派4系列、2K1000龙芯教育派、Radxa Rock5B、BeagleBo…

攒粒是什么?怎么用攒粒赚钱?

攒粒简介 攒粒的前身是91问问&#xff0c;隶属于上海道道永泉市场调查有限公司&#xff0c;是一家专业的全球在线调研服务公司&#xff0c;也是是国内排名前列的社区调查之一&#xff0c;10年在线调研&#xff0c;600万会员亲身体验&#xff0c;提供网络调查、市场调查、问卷调…

KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去

一、简介 KT6368A再被连接之后&#xff0c;AT命令会被透传出去。被透传的这组AT命令是符合文档要求&#xff0c;不应被透传&#xff0c;实际却经常被透传。并且可以每次都复现 详细描述 有问题部分的串口数据监控结果如下&#xff1a;其中41 54 2B 42 4D 46 30 41 46 42 43 3…

从零自制docker-15-【实现 mydocker run -d 支持后台运行容器】

文章目录 实现目的莫名奇妙的问题对之前upper层出现root补充对run某些命令出现找不到文件或目录的原因代码效果 实现目的 docker run -d时容器在后台运行&#xff0c;而不会进入命令行交互形式 首先是需要添加-d选项然后设置当添加-d选项时候主进程不会等待子进程&#xff0c…

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接&#xff1a;Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处…

GPT-4o: 未来的智能助手

GPT-4o: 未来的智能助手 在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。作为OpenAI最新推出的语言模型&#xff0c;GPT-4o不仅继承了前几代模型的优点&#xff0c;还在多个方面进行了显著的提升。本文将带你深入了解…

DreamerV3阅读笔记

DreamerV3 文章希望解决的一个挑战是用固定的hyperparameter来同时处理不同domain的任务。文章发现&#xff0c;通过结合KL balancing 和free bits可以使得world model learn without tuning&#xff08;是指上面这件事&#xff0c;即不需要对不同任务改变hyperparameter&#…

2024年电工杯高校数学建模竞赛(B题) 建模解析| 大学生平衡膳食食谱的优化设计

问题重述及方法概述 问题1&#xff1a;膳食食谱的营养分析评价及调整 数学方法&#xff1a;线性规划模型、营养素评价模型、比较分析 可视化数据图&#xff1a;营养素含量表、营养素摄入量对比图、营养素缺乏情况图 问题2&#xff1a;基于附件3的日平衡膳食食谱的优化设计 数…

KingbaseES数据库物理备份还原sys_rman

数据库版本&#xff1a;KingbaseES V008R006C008B0014 简介 sys_rman 是 KingbaseES 数据库中重要的物理备份还原工具&#xff0c;支持不同类型的全量备份、差异备份、增量备份&#xff0c;保证数据库在遇到故障时及时使用 sys_rman 来恢复到数据库先前状态。 文章目录如下 1.…