C语言-strncmp strncat strncpy长度受限制的字符串函数

strncmp strncat strncpy长度受限制的字符串函数

首先 我们需要知道 这几个的语法格式差不多 

这里传递的size_t的长度是传递的字节长度 不是个数 也就这里int*是四个字节 char*是一个字节 如果是整数进行交换 。此时也就需要20个字节,这样可以交换五个整数

这里差异只是多一个参数 也就是size_t sz长度参数

strncpy(拷贝)

这里只是多一个字节长度

这里拷贝三个

这里是让拷贝几个就拷贝几个 没有’\0‘

这里拷贝8个 这里是不足八个 加上'\0'

strncpy代码的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
void my_strncpy(char* str1, char* str2, size_t sz)
{assert(str1 && str2);while (sz > 0)//这里是字节交换 每次sz会进行减少一个字节{*str1 = *str2;//这里进行复制str1++; //各自向后移动str2++;sz--;//字节每次减少1 }
}
int main()
{char arr1[] = "dfhguil";char arr2[100] = { 0 };my_strncpy(arr2, arr1, 3);printf("%s", arr2);return 0;
}

strncat(拼接)

举例1

这里是追加三个字节

举例2

这里是追加3个 从前往后走进行追加 把该追加的追加之后 会放一个字符串

举例3

把该追加的追加之后 加上字符串0 之后就不继续添加了

strncat的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
void my_strncat(char* str1, char* str2, size_t sz)
{assert(str1 && str2);//这里使用一个断言 也就是只要不是空指针 就可以继续运行while (*str1 != '\0')//这里是先找到第一个数组的'\0'然后跳出循环str1++;while (sz != 0)//其次和之前的循环方式一样 每次减少一个字节 ++ 把数值赋给arr1 但是这里需要知道 这里是常量字符串 所以需要arr1 的空间大于arr2{*str1 = *str2;str1++;str2++;sz--;}*str1 = '\0';//最后是把'\0'放到字符串的结尾
}
int main()
{char arr1[100] = "hello ";char arr2[] = "bitttt";my_strncat(arr1, arr2, 3);printf("%s", arr1);return 0;
}

strncmp(比较)

这里是比较前两个字节  

在给定 的长度范围内进行比较

这里你让我拷贝 我就进行拷贝 存在越界访问的情况

这里拷贝出来 但是程序崩溃了

strncmp的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strcmp(char* str1, char* str2, size_t sz)
{assert(str1 && str2);while (*str1 == *str2)//这里代码循环的条件就是只要相等就继续++ 然后遇见最后一个字符'\0'自然会跳出循环{if (sz == 0)//这里每次循环的时候会进行sz的-- 也就是对照字符的-- 如果不满足相等的条件 此时也就会跳出循环{return 0;}str1++; str2++;sz--;}return *str1 - *str2;//while (*str1 == *str2 && sz > 0)//{//	str1++; //	str2++;//	sz--;//}//return sz == 0 ? 0:(*str1 - *str2);//这里是使用一个三目操作符 如果满足sz循环 也就是返回0  不然就是返回差值 这样也是允许的}int main()
{char arr1[100] = "hello ";char arr2[] = "bitttt";int ret = my_strcmp(arr1, arr2, 3);printf("%d", ret);return 0;
}

 

代码使用的总结

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
int main()
{//拼接限制函数的使用  这里拼接三个char arr1[100] = "slaidg ";char arr2[] = "dfilsug ";strncat(arr1, arr2, 3);printf("%s\n\n", arr1);//拷贝限制函数的使用 这里拷贝五个char arr3[] = "slaidg ";char arr4[100] = { 0 };strncat(arr4, arr3, 5);printf("%s\n\n", arr4);//比较函数的使用char arr5[] = "slaidg ";char arr6[] = "dfilsug ";char arr7[] = "slaidg ";int ret1 = strcmp(arr5, arr6, 3);//不相同 1   前三位比较的时候上面的大 arr5大int ret2 = strcmp(arr5, arr7, 3);//相同   0   前三位一样大printf("%d\n%d\n", ret1, ret2);
}

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

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

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

相关文章

Python QT 之PySide6简单入门

目录 1.开发环境配置 1.1 下载PySide6 2.2 配置pycharm相关快捷方式 PySide6_Designer - QT Designer 设计UI PySide6_UIC - 将QT Designer生成的UI文件转换为python文件 PySide6_RCC - 将RCC文件转换为python文件 2.第一个开发实例 2.1 QT desiger设计界面 2.2 将ui文…

springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出

springbootpoi-tl根据模板导出word&#xff08;含动态表格和图片&#xff09; 官网&#xff1a;http://deepoove.com/poi-tl/ 参考网站&#xff1a;https://blog.csdn.net/M625387195/article/details/124855854 pom导入的maven依赖 <dependency><groupId>com.dee…

Linux远程连接本地数据库(docker)

1. 安装docker 参考上一篇文章 CentOS安装Docker 2. Linux中安装Mysql 2.1 docker拉取mysql镜像 拉取镜像 docker pull mysql查看镜像列表 docker images2.2 运行mysql容器 运行一个名字为mysql的mysql容器&#xff0c;其连接端口号为3306&#xff0c;密码为123456 docker r…

rembg报错onnxruntime_providers_tensorrt.dll

报错&#xff1a; 2024-03-16 04:16:59.4413827 [E:onnxruntime:Default, provider_bridge_ort.cc:1534 onnxruntime::TryGetProviderInfo_TensorRT] D:\a_work\1\s\onnxruntime\core\session\provider_bridge_ort.cc:1209 onnxruntime::ProviderLibrary::Get [ONNXRuntimeErro…

基于springboot的七彩云南文化旅游网站的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装七彩云南文化旅游网站软件来发挥其高效地信息处理的作用&am…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法&#xff0c;在众多文献均有应用。下面简述一下原理。 &#xff08;1&#xff09;量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念&#xff0c;它与经典比特不同&#xff0c;是因为它可以在同一时刻处于两个状态的…

excel统计分析——曲线回归

参考资料&#xff1a;生物统计学 两个变量之间常呈非直线关系&#xff0c;非直线关系的两个变量需要用曲线回归模型来进行分析。曲线回归&#xff08;curvilinear regression&#xff09;有多种曲线类型。选择曲线类型时&#xff0c;需要根据散点图观察变量间的协同变化区试&am…

基于openresty构建运维工具链实践

本文字数&#xff1a;4591字 预计阅读时间&#xff1a;25 01 导读 如今OpenResty已广泛被各个互联网公司在实际生产环境中应用&#xff0c;在保留Nginx高并发、高稳定等特性基础上&#xff0c;通过嵌入Lua来提升在负载均衡层的开发效率并保证其高性能。本文主要介绍接口鉴权、流…

npm WARN config init.license Use `--init-license` instead.

背景&#xff1a;近期升级本地node版本&#xff08;v14.15.4 --> v18.19.1&#xff09;&#xff0c;npm -v报警 npm WARN config init.license Use --init-license instead. npm WARN config init.author.name Use --init-author-name instead. 分析&#xff1a; npm高版本…

【pynput】监控是否打开百度贴吧网页

文章目录 简介Demo 简介 有网友提过一个要求&#xff0c;用 Python 实现一个 电脑打开某网站就自动关机的功能。 想到的思路有两个&#xff1a; 【windows 平台】, 获取活动的窗口标题&#xff0c;如果标题里包含了某些网站名称, 那就使用关机命令 可以定时拉取标题, 也可以使…

世上最全Python学习思路

孤客python学习思路 python学习从入门到精通前言 预备知识Python简介程序设计思想导入python资源包用户体验模块获得A和B的能力值与场次模块模拟n局比赛模块判断比赛结束条件模拟n次单局比赛模拟n局比赛打印结果模块 安装Python运行方式常用开发工具编码规范模块管理 python学习…

通付盾Web3专题 | SharkTeam:2023年加密货币犯罪分析报告

2023年&#xff0c;Web3行业共经历了940多起大大小小的安全事件&#xff0c;同比2022年增长了超过50%&#xff0c;损失金额达到17.9亿美元。其中&#xff0c;第三季度发生的安全事件最多&#xff08;360起&#xff09;&#xff0c;损失最大&#xff08;7.4亿美元&#xff09;&a…