字符串函数strncpy、strncat、strncmp的功能(3)

目录

引言: 

一、strncpy函数介绍:

1.声明:

2.功能:

3.底层代码:

二、strnact函数介绍:

1.声明:

2.功能:

3.底层代码:

三、strncmp函数介绍:

1.声明:

2.功能:

3.底层代码:

总结:


引言: 

        strncpy、strncat和strncmp是三个非常常用的字符串函数,它们在字符串的复制、连接和比较方面发挥着重要作用。本文将介绍这三个函数的功能和使用方法。


strcpy、strcat和strcmp函数功能的实现请查看博客:

自我实现——字符串函数strcpy、strcat、strcmp的功能(2)-CSDN博客


一、strncpy函数介绍:

1.声明:

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

2.功能:

        将原字符串的前num个字符复制到destination。

        如果复制num个字符之前,已到达原字符串的末尾(由null表示),则剩余destination将填充为零,直至总共写入num个字符。

        destination和source的内存存放位置不能重叠,若重叠需考虑其他安全方案替代,如memmove函数,我将在后续介绍内存操作函数时写到

3.底层代码:

char * __cdecl strncpy (char * dest, const char * source, size_t count)
{char *start = dest;while (count && (*dest++ = *source++) != '\0')    /* copy string */count--;if (count)                              /* pad out with zeroes */while (--count)*dest++ = '\0';return(start);
}

二、strncat函数介绍:

1.声明:

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

2.功能:

        char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

3.底层代码:

char * __cdecl strncat (char * front, const char * back, size_t count)
{char *start = front;while (*front++);front--;while (count--)if ((*front++ = *back++) == 0)return(start);*front = '\0';return(start);
}

三、strncmp函数介绍:

1.声明:

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

2.功能:

        用于比较两个字符串的前 n 个字符是否相等。

        通常用于比较两个字符串,以确定它们是否相等或哪个字符串在字典顺序上更小。

         int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字符。

3.底层代码:

int __cdecl strncmp
(const char *first,const char *last,size_t      count
)
{size_t x = 0;if (!count){return 0;}/** This explicit guard needed to deal correctly with boundary* cases: strings shorter than 4 bytes and strings longer than* UINT_MAX-4 bytes .*/if( count >= 4 ){/* unroll by four */for (; x < count-4; x+=4){first+=4;last +=4;if (*(first-4) == 0 || *(first-4) != *(last-4)){return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));}if (*(first-3) == 0 || *(first-3) != *(last-3)){return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));}if (*(first-2) == 0 || *(first-2) != *(last-2)){return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));}if (*(first-1) == 0 || *(first-1) != *(last-1)){return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));}}}/* residual loop */for (; x < count; x++){if (*first == 0 || *first != *last){return(*(unsigned char *)first - *(unsigned char *)last);}first+=1;last+=1;}return 0;
}

总结:

        strncpy、strncat和strncmp这三个函数在字符串操作中发挥着重要作用,掌握它们的使用方法对于提高编程效率和程序质量具有重要意义。在实际编程过程中,合理运用这些函数,可以有效避免字符串操作中的一些常见错误,提高程序的稳定性和可靠性。 

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

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

相关文章

常见电源电路(LDO、非隔离拓扑和隔离拓扑结构)

一、常见电路元件和符号 二、DC-DC转换器 DC-DC转换器&#xff1a;即直流-直流转换器&#xff0c;分为三类&#xff1a;①线性调节器&#xff1b;②电容性开关解调器&#xff1b;③电感性开关调节器&#xff1b; 2.1线性稳压器&#xff08;LDO&#xff09; 2.1.1 NMOS LDO…

如何将前后端分离(vue2+SpringBoot)项目部署到腾讯云服务器

如何将前后端分离&#xff08;vue2SpringBoot&#xff09;项目部署到腾讯云服务器 目录 如何将前后端分离&#xff08;vue2SpringBoot&#xff09;项目部署到腾讯云服务器 1、在选中目录地下新建2个文件夹 2、将打包好的前端项目和后端jar包上传到相应的目录下 3、将路径切…

Gin 应用多实例部署session问题、session参数与刷新

文章目录 一、Gin Session 存储的实现方案二、memstore&#xff1a;基于内存的实现2.1 基本使用2.2 关键参数 三、使用redis&#xff1a;多实例部署3.1 使用redis优势3.2 基本使用 四、信息安全的三个核心概念五、Gin Session 参数5.1 参数介绍 六、Session 自动刷新 一、Gin S…

语图奇缘:林浩然与杨凌芸的哲学漫画大冒险

语图奇缘&#xff1a;林浩然与杨凌芸的哲学漫画大冒险 Language Odyssey: The Philosophical Comic Adventure of Lin Haoran and Yang Lingyun 在一个充满逻辑谜题和言语陷阱的城市——逻言市&#xff0c;住着两位热衷于探索语言奥秘的年轻人&#xff0c;林浩然和杨凌芸。林浩…

Qt的绘制是如何发生的

QEvent::WindowDeactivate 当用户鼠标在应用之外时&#xff0c;会触发QEvent::WindowDeactivate事件&#xff0c; Qt5Widgetsd.dll!QApplication::setActiveWindow(QWidget * act) Line 2072 C Qt5Widgetsd.dll!QApplicationPrivate::notifyActiveWindowChange(QWindo…

一篇文章带你了解C++中隐含的this指针

文章目录 一、this指针的引出二、this指针的特性【面试题】 一、this指针的引出 我们先来定义一个日期类Date&#xff0c;下面这段代码执行的结果是什么呢&#xff1f; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}v…

2024新版68套Axure RP大数据可视化大屏模板及通用组件+PSD源文件

Axure RP数据可视化大屏模板及通用组件库2024新版重新制作了这套新的数据可视化大屏模板及通用组件库V2版。新版本相比于V1版内容更加丰富和全面&#xff0c;但依然秉承“敏捷易用”的制作理念&#xff0c;这套作品也同样延续着我们对细节的完美追求&#xff0c;整个设计制作过…

【PythonRS】Rasterio库安装+基础函数使用教程

Rasterio是一个Python库&#xff0c;专门用于栅格数据的读写操作。它支持多种栅格数据格式&#xff0c;如GeoTIFF、ENVI和HDF5&#xff0c;为处理和分析栅格数据提供了强大的工具。RasterIO适用于各种栅格数据应用&#xff0c;如卫星遥感、地图制作等。通过RasterIO&#xff0c…

Two-factor authentication (2FA) is required for your GitHub account解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

SkyWalking介绍与使用docker-compose部署服务

一、Skywalking概述 1、Skywalking介绍 Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等…

gitee仓库使用中的警告

当 Git 执行 git pull 命令时&#xff0c;有时候会出现类似下面的警告信息&#xff1a; warning: ----------------- SECURITY WARNING ---------------- warning: | TLS certificate verification has been disabled! | warning: ------------------------------------------…

Python退出主程序

import sys sys.exit(1) exit函数的使用方法 Exit the interpreter by raising SystemExit(status).If the status is omitted or None, it defaults to zero (i.e., success). If the status is an integer, it will be used as the system exit status. If it is another kin…

网络安全03---Nginx 解析漏洞复现

目录 一、准备环境 二、实验开始 2.1上传压缩包并解压 2.2进入目录&#xff0c;开始制作镜像 2.3可能会受之前环境影响&#xff0c;删除即可 ​编辑 2.4制作成功结果 2.5我们的环境一个nginx一个php 2.6访问漏洞 2.7漏洞触发结果 2.8上传代码不存在漏洞 2.9补充&#…

ubuntu 编译使用 liblas 读取点云

在ubuntu上使用las读取点云 1、环境配置 1.1、安装libgeotiff 下载依赖 sudo apt-get install libtiff-dev //安装libtiff sudo apt-get install libproj-dev //安装libproj下载源码&#xff0c;编译 如下该是libgeotiff-1.3.0版本安装包 wget https://download.osgeo.o…

【蓝桥杯冲冲冲】旅行计划

蓝桥杯备赛 | 洛谷做题打卡day18 文章目录 蓝桥杯备赛 | 洛谷做题打卡day18旅行计划题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解代码我的一些话 旅行计划 题目描述 Kira酱要去一个国家旅游。这个国家有 N N N 个城市&#xff0c;编号为 1 1 1 至 N N…

计算机网络(第六版)复习提纲11

二、CSMA/CD协议 1.广播信道上的一对一通信 2.以太网的两个措施 a)采用无连接的方法&#xff0c;不可靠 b)发送的数据都是用曼彻斯特编码 3.CSMA/CD协议&#xff08;先听后说&#xff0c;边听边说&#xff09; a)前身是ALOHA协议&#xff0c;想发就发&#xff0c;冲突时随机等待…

SpringSecurity(16)——OAuth2客户端授权模式

工作流程 基本使用 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>…

大数据Doris(五十九):SQL函数之字符串函数(三)

文章目录 SQL函数之字符串函数(三) 一、​​​​​​​NULL_OR_EMPTY (VARCHAR str)

力扣1312. 让字符串成为回文串的最少插入次数

动态规划 思路&#xff1a; 通过插入字符构造回文串&#xff0c;要想插入次数最少&#xff0c;可以将字符串 s 的逆序 s 进行比较找出最长公共子序列&#xff1b;可以先分析&#xff0c;字符串 s 通过插入得到回文串 ps&#xff0c;其中间的字符应该不会变化&#xff1a; 若 s…

IO复用之epoll模型

什么是epoll epoll 是 Linux 操作系统提供的一种高性能的事件通知机制&#xff0c;用于处理大量文件描述符上的事件。它是一种 I/O 事件通知机制&#xff0c;通常用于处理网络编程中的并发连接。 在传统的 I/O 模型中&#xff0c;程序通常使用 select 或 poll 函数来等待多个…