详解C语言string.h中常用的14个库函数(二)

news2024/11/23 15:27:47

string.h中的库函数

本篇博客继续讲解string.h中的库函数。在上一篇博客中,我介绍了strlen, strcpy, strcat, strcmp这4个字符串操作函数,本篇博客会继续介绍strncpy, strncat, strncmp这3个类似的函数。

strcpy, strcat, strcmp这3个函数是长度不受限制的字符串操作函数,而strncpy, strncat, strncmp则是对应的3个长度受限制的字符串操作函数。这个“长度受限制”应该如何理解呢?

对于strcpy, strcat, strcmp这3个函数,有一个共同的特点,操作字符串时,只看字符串的结束标志,即\0,所以说它们是长度不受限制的。

  • strcpy会一直拷贝源字符串,直到遇到源字符串结尾的\0
  • strcat会一直追加源字符串到目标字符串后面,直到遇到源字符串结尾的\0
  • strcmp在比较2个字符串时,如果一直相同,会一直向后比较,直到某一个字符串遇到了\0

如果是“长度受限制”的函数,应该是:

  • strncpy可以指定拷贝多少个字符。
  • strncat可以指定最多追加多少个字符。
  • strncmp可以指定最多比较多少个字符。

下面我一一详细介绍。

strncpy

char * strncpy ( char * destination, const char * source, size_t num );

strncpy和strcpy都是用来拷贝字符串的,但是strncpy多了第3个参数:num。num代表拷贝的字符的个数,不管源字符串长度是多少,一律拷贝num个字符过去,如果不够就用\0补齐。

比如:

char arr1[20] = "xxxxxxxxxx";
char arr2[] = "abcde";
  1. strncpy(arr1, arr2, 4);会把abcd拷贝过去。
  2. strncpy(arr1, arr2, 5);会把abcde拷贝过去,不拷贝\0
  3. strncpy(arr1, arr2, 6);会把abcde和\0都拷贝过去。
  4. strncpy(arr1, arr2, 7);会把abcde和2个\0拷贝过去。
  5. strncpy(arr1, arr2, 8);会把abcde和3个\0拷贝过去。

下面我在VS2022中分别验证这5种情况。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

strncpy总结:

  1. strncpy会拷贝num个字符,从源字符串到目标空间。
  2. 如果strlen(src)<num,在把src中的字符(不包括结尾的\0)都拷贝到目标空间后,会补\0,直到拷贝字符总数为num。

strncat

char * strncat ( char * destination, const char * source, size_t num );

strncat会在目标字符串后面追加源字符串,最多追加num个字符(不包括\0),然后再追加一个\0以保证目标空间里仍然是一个字符串。

比如:

char arr1[20] = "xxx\0xxxxxxxxxx";
char arr2[] = "abcde";
  1. strncat(arr1, arr2, 4);会追加abcd,再追加\0
  2. strncat(arr1, arr2, 5);会追加abcde,再追加\0
  3. strncat(arr1, arr2, 6);会追加abcde,再追加\0
  4. strncat(arr1, arr2, 7);会追加abcde,再追加\0
  5. strncat(arr1, arr2, 8);会追加abcde,再追加\0

下面我在VS2022中分别验证这5种情况。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
strncat总结:

  1. strncat在完成字符串追加的同时,还可以限定最多追加的字符个数。
  2. strncat的第3个参数表示,最多追加几个字符过去(不包括\0),然后再追加一个\0过去。

strncmp

int strncmp ( const char * str1, const char * str2, size_t num );

这个函数就很简单了,在字符串比较的基础上,最多比较num对字符。比如:

  1. strncmp("abcdefg", "abcdq", 4);返回0。
  2. strncmp("abcdefg", "abcdq"), 5;返回负数。
  3. strncmp("abcd", "abcd", 10);返回0,只要一个字符串遇到\0就停止比较。
  4. strncmp("abcde", "abcd");返回正数。

strncmp总结:

  1. 比较字符串,且最多比较num对字符。
  2. 如果其中一个字符串遇到\0,另外一个字符串如果也同时遇到\0则2个字符串相等,如果另外一个字符串还没有遇到\0,则提前遇到\0的字符串更小。

总结

  1. strncpy的第3个参数决定了要拷贝多少个字符过去,如果不够就补\0
  2. strncat的第3个参数决定了最多追加多少个字符过去(不包括源字符串结尾的\0),然后再追加一个\0过去。
  3. strncmp的第3个参数决定了最多比较多少对字符,如果比较出了大小,或者其中一个字符串遇到了\0则比较结束。

感谢大家的阅读!

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

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

相关文章

预算约束下营销效果优化的端到端框架(快手)

目录 翻译&#xff1a;预算约束下营销效果优化的端到端框架 1介绍 2 .相关工作 2.1预算分配 2.2梯度估计 3我们的端到端框架 3.1符号 ​3.2两阶段范式 3.3 Marketing Goal as a Regularizer 3.4梯度估计 ​3.5训练 4实验结果 4.1数据集 4.2评价指标 4.3实现细节 …

Windows环境下NVM安装后Node/NPM命令无法使用

问题&#xff1a;Windows环境下安装nvm后&#xff0c;使用nvm安装node&#xff0c;无法使用node相关命令。 解决方案&#xff1a;注意安装的时候有两个路径&#xff0c;第一个是nvm所在的路径&#xff0c;第二个是nodejs所在的路径&#xff0c;大家需要在对应的目录下找到路径…

基于SSM的电影订票管理系统

有需要请私信或看评论链接哦 可远程调试 基于SSM的电影订票管理系统 一 介绍 基于SSM的电影订票管理系统&#xff0c;本项目分为前台和后台&#xff0c;登录角色分为普通用户和管理员。用户可注册登录&#xff0c;个人中心&#xff0c;搜索电影&#xff0c;选座购票&#xff…

机器学习——损失函数(lossfunction)

问&#xff1a;非监督式机器学习算法使用样本集中的标签构建损失函数。 答&#xff1a;错误。非监督式机器学习算法不使用样本集中的标签构建损失函数。这是因为非监督式学习算法的目的是在没有标签的情况下发现数据集中的特定结构和模式&#xff0c;因此它们依赖于不同于监督…

QMS-云质说质量 - 5 解决中小企业质量问题的钥匙在哪里?

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 引言 一个小小的质量问题可能引发蝴蝶效应 日常生活中&#xff0c;我们每天都会遇到各种各样的问题&#xff0c;并随着它们喜怒哀乐。企业也不例外&#xff0c;即使有很好的管理体系以及非常高素质的员工&#xff0c;一些错…

XGBoost模型详解

1.什么是XGBoost&#xff1f; GBDT&#xff0c;它是一种基于boosting增强策略的加法模型&#xff0c;训练的时候采用前向分布算法进行贪婪的学习&#xff0c;每次迭代都学习一棵CART树来拟合之前 t − 1 t-1 t−1 棵树的预测结果与训练样本真实值的残差。XGBoost对GBDT进行了一…

C/C++每日一练(20230424)

目录 1. 只出现一次的数字 &#x1f31f; 2. 有效的括号 &#x1f31f;&#x1f31f; 3. 递归反序正整数 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 只出现一次…

《站在巨人的肩膀上学习Java》

Java从诞生距今已经有28年了&#xff0c;在这段时间里&#xff0c;随着Java版本的不断迭代&#xff0c;Java新特性的不断出现&#xff0c;使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一&#xff0c;Java一直排行在编程语言热门程度的前3名。 可想而…

ora_scm0导致主机负载高

今天不知道了&#xff0c;几个12.2 RAC出问题&#xff0c;有现场反馈主机负载高&#xff0c;之前连接过该环境&#xff0c;知道是12.2环境&#xff0c;直接top查看&#xff0c;发现ora_scm0经常cpu使用率100%了&#xff0c;查看hydb1主机负载正常 直接上mos文档 12.2 RAC DB B…

字节和阿里,谁的管理模式更先进?

有人说&#xff0c;字节跳动的成功&#xff0c;是商业模式和管理模式的成功。不无道理&#xff0c;相比阿里巴巴以KPI绩效考核、强制淘汰的组织管理模式来说&#xff0c;字节的模式有其先进的地方。 在商业模式上&#xff0c;字节用算法的方式&#xff0c;10倍速地提升了信息分…

2023.04.24 c++第六讲

作业&#xff1a; 1. 手动实现顺序栈&#xff0c;要求实现数据结构中&#xff0c;所有栈的相关操作 #include <iostream> #define MAXSIZE 20 //宏定义&#xff0c;栈的最大容量 using namespace std;template <typename T> class stacklink { pri…

ESXi8.0安装Windows10系统教程

本篇教程主要教大家怎么在ESXi虚拟机上安装Windows10系统&#xff0c;首先安装Windows10需要准备一个ISO系统镜像文件&#xff0c;我们可以去MSDN或者是微软官网下载。 镜像下载教程&#xff1a; 下两种方法都可以下载ISO镜像文件&#xff0c;任选其一下载即可 方法一&#xf…

BDD110 HNLP205879R1设备控制、监视、报警及打印报表等管理功能

​ BDD110 HNLP205879R1设备控制、监视、报警及打印报表等管理功能 基于ABB AC500系列PLC的水泥生产线控制系统 随着中国经济的迅速发展&#xff0c;各行各业对水泥的需求日益增加。目前国内外各大水泥企业纷纷在华兴建大型干法旋窑水泥生产线&#xff0c;这为水泥行业的发展提…

【SWAT水文模型】ArcSWAT安装

SWAT水文模型-ArcSWAT安装 安装ArcSWAT1.1 下载ArcSWAT1.2 安装ArcSWAT1.3 加载ArcSWAT 参考 SWAT水文模型原理及数据库简介可参见另一博客文章-【水文模型】SWAT水文模型原理及数据库简介。 本博客主要介绍ArcSWAT的安装。 安装ArcSWAT 1.1 下载ArcSWAT 安装之前&#xff0…

广域通信网 - 差错控制(停等 ARQ 协议、选择重发 ARQ 协议、后退 N 帧 ARQ 协议)

文章目录 1 概述2 差错控制的办法2.1 停等 ARQ 协议2.2 选择重发 ARQ 协议2.3 后退 N 帧 ARQ 协议 3 扩展3.1 流量控制3.2 网工软考真题 1 概述 #mermaid-svg-ju8w1gQxodkcBbaB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#me…

【应急响应】后门攻击检测指南Rookit内存马权限维持WINLinux

文章目录 Windows实验常规后门&#xff1a; 网络对外连接查看 自启动测试&#xff1a;隐藏账户映像劫持屏保&登录 Linux实验常规后门&#xff1a;Rootkit后门&#xff1a;GScan rkhunter权限维持后门&#xff1a;GScan rkhunter Web层面&#xff1a;通用系统层面 主机层面后…

网络设备发现工具

什么是网络设备发现 网络设备发现是识别和映射网络基础架构&#xff08;如路由器、交换机、集线器、防火墙、无线接入点、服务器、虚拟机等&#xff09;中存在的设备和接口的过程。网络发现是网络管理的第一步&#xff0c;也是成功监控解决方案的关键。该过程不仅涉及发现网络…

【超算/先进计算学习】日报6

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记传统性能优化从体系结构角度理解四种计算优化途径-主频/缓存/流水线/超标量优化途径的有效适用条件存储墙与层次式存储结构数据局部性与cache循环合并循环展开循环交换循环分布循环不变量外提循环分块循环分裂 优化…

zabbix环境准备

zabbix基础设置(运维笔记) 准备三台主机配置主机名hostnamectl set-hostname --static zabbixserver.cluster.comvi /etc/hosts192.168.126.143 zabbixserver.cluster.com 192.168.126.142 agent1.cluster.com 192.168.126.141 agent2.cluster.com三台机器同步时间 ntpdate…

springboot中统一功能处理浅析

在springboot工程中实现统一功能的处理&#xff0c;主要分析以下3个统一功能场景&#xff1a; 1、统一用户登录权限验证 2、统一数据格式返回 3、统一异常处理 1、统一用户登录权限验证 用户登录权限验证从最初每个方法中自己验证用户登录权限&#xff0c;逐步发展到进行统一用…