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

news2024/11/18 15:47:51

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/445072.html

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

相关文章

ubuntu安装V2board宝塔面板教程

ubuntu安装V2board宝塔面板教程 运行环境:ubuntu-20.04 搭建宝塔web页面环境 切到linux服务器命令行 在用户目录下创建BT目录,进入BT目录 在BT目录下执行命令 sudo wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo sh install.sh…

考虑梯水电站群的水火电节能调度(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

oracle rac 安装文档

oracle rac 安装文档 一、前期准备1.1 操作系统centos 7.4 *2台&#xff0c;要求双网卡1.2 主机名&#xff1a;oracle01&#xff0c;oracle021.3 数据库版本&#xff1a;oracle 11g rac1.4 空间要求&#xff1a;1.4.1 系统&#xff1a;&#xff08;系统使用磁盘&#xff09;1.4…

python基于mediapipe开发构建人体姿态检测系统

之前做的人体姿态检测大都是基于openpose或者是yolo-pose之类的技术框架&#xff0c;这里主要是想基于一个开源的实现来完成人体姿态检测。首先看下效果图&#xff1a; Mediapipe是google的一个开源项目&#xff0c;支持跨平台的常用ML方案。项目在这里&#xff0c;如下所示&am…

软件挖掘|软件缺陷|蜕变关系

目录 软件无处不在 软件发展不是一个简单的任务 识别软件缺陷 软件缺陷定位 使用bug报告识别有缺陷的源代码 使用标准IR方法建模相关性 VSM rVSM 根据bug报告和源代码学习共享主题&#xff0c;并根据主题衡量相关度 学习结合大量手工制作的特性 如何建模&#xf…

页表结构详细说明

一、页表 1. 内存地址的分解 我们知道linux采用了分页机制&#xff0c;通常采用四级页表&#xff0c;页全局目录(PGD)&#xff0c;页上级目录(PUD)&#xff0c;页中间目录(PMD)&#xff0c;页表(PTE)。如下&#xff1a; 其含义定义在arch/arm64/include/asm/pgtable-hwdef.…

应急响应 - Windows启动项分析,Windows计划任务分析,Windows服务分析

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 Windows应急响应 一、启动项分析1、msconfig2、gpedit.msc3、注册表4、msinfo325、启动菜…

【数据结构实验】哈希表设计

【数据结构实验】哈希表设计 简介 针对本班同学中的人名设计一个哈希表&#xff0c;使得平均查找长度不超过R&#xff0c;完成相应的建表和查表程序。文末贴出了源代码。 需求分析 假设人名为中国人姓名的汉语拼音形式&#xff0c;待填入哈希表的人名共有三十个左右&#x…

汇编指令角度掌握函数调用堆栈详细过程

函数参数从右向左依次压栈push&#xff0c;call 要先把下一行指令 压栈&#xff0c; 根据如下代码思考两个问题&#xff1a; 问题一&#xff1a;main函数调用sum&#xff0c;sum执行完以后&#xff0c;怎么知道回到哪个函数中&#xff1f; 问题二&#xff1a;sum函数执行完&…

使用树状图可视化聚类

一般情况下&#xff0c;我们都是使用散点图进行聚类可视化&#xff0c;但是某些的聚类算法可视化时散点图并不理想&#xff0c;所以在这篇文章中&#xff0c;我们介绍如何使用树状图&#xff08;Dendrograms&#xff09;对我们的聚类结果进行可视化。 树状图 树状图是显示对象…

vue 项目中 向数组 添加元素 的方式

学习目标&#xff1a; 提示&#xff1a;了解 vue 向数组 添加元素 的三种方式 学习内容&#xff1a; 提示&#xff1a; vue 向数组 添加元素 的三种方式 方法&#xff1a; push()unshift()splice() 总结&#xff1a; 提示&#xff1a;这里总结相关的知识 1、push() 含义&a…

网络编程之 Socket 套接字(使用数据报套接字和流套接字分别实现一个小程序(附源码))

文章目录 1. 什么是网络编程2. 网络编程中的基本概念1&#xff09;发送端和接收端2&#xff09;请求和响应3&#xff09;客户端和服务端4&#xff09;常见的客户端服务端模型 3. Socket 套接字1&#xff09;Socket 的分类2&#xff09;Java 数据报套接字通信模型3&#xff09;J…

【Redis7】Redis7 集群(重点:哈希槽分区)

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Redis7 集群概述、作用、集群算法-分片-槽位slot、集群环境案例步骤、集群常用操作命令和CRC16算法。 后续会继续分享Redis7和其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&am…

ChatGPT 的数据保护盲点以及安全团队如何解决这些盲点

自成立以来的短时间内&#xff0c;ChatGPT 和其他生成式 AI 平台理所当然地赢得了终极生产力助推器的声誉。 然而&#xff0c;能够按需快速生成高质量文本的技术&#xff0c;可能同时暴露敏感的公司数据。 最近发生的一起事件&#xff0c;三星软件工程师将专有代码粘贴到 ChatG…

SpringBoot集成MyBatis-yml方式详解

SpringBoot集成MyBatis-yml方式详解 简介&#xff1a;spring boot整合mybatis开发web系统目前来说是市面上主流的框架&#xff0c;每个Java程序和springboot mybatis相处的时间可谓是比和自己女朋友相处的时间都多&#xff0c;但是springboot mybatis并没有得到你的真爱&#x…

涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov8,内存更小、效率更高,秒杀Adam(W)

1.Lion优化器介绍 论文:https://arxiv.org/abs/2302.06675 代码:automl/lion at master google/automl GitHub 1.1 简单、内存高效、运行速度更快 1)与 AdamW 和各种自适应优化器需要同时保存一阶和二阶矩相比,Lion 只需要动量,将额外的内存占用减半; 2)由于 Lion…

企业批量寄件快递教程

了解企业批量寄快递操作流程之前&#xff0c;我们先来解答一下这个问题&#xff1a;什么样的企业需要批量寄快递&#xff1f; 电商行业就不提&#xff0c;本身二者就是相互依存的关系。就商务件来说&#xff0c;具体什么样的企业需要批量寄快递&#xff0c;其实很简单&#xf…

Ansys Zemax | 如何使用坐标返回功能

概述 这篇文章简单介绍了如何使用OpticStudio中的坐标返回(Coordinate Return)功能。坐标返回功能可以非常方便的使系统坐标自动返回到目标表面处。&#xff08;联系我们获取文章附件&#xff09; 介绍 在OpticStudio的序列模式中&#xff0c;我们经常会使用坐标间断(Coordinat…

Netty 源码解析(上)

序 Netty的影响力以及使用场景就不用多说了&#xff0c; 去年10月份后&#xff0c;就着手研究Netty源码&#xff0c;之前研究过Spring源码&#xff0c;MyBatis源码&#xff0c;java.util.concurrent源码&#xff0c;tomcat源码&#xff0c;发现一个特点&#xff0c;之前的源码都…

PHPStudy安装imagick扩展

phpstudy软件管理中没有自带安装imagick扩展&#xff0c;只能自己安装了。 下面将用几个步骤来进行phpstudy imagick安装&#xff1a; 1.下载imagick 下载地址 ImageMagick – Download 下载电脑版本相对的64/32位&#xff0c;最新的版本 2.安装imagick 双击刚刚下载的文件…