/*      PC上食用更佳哦!

基于内核4.9.88,至于为什么要看内核,我觉得看内核了解其原理,和man搭配使用效果更好

date:2022年7月6日11:06:30

*/

strncmp,比strcmp多了个n,n代表什么呢?

man一下看看

描述的很清楚,strncmp只比较前面n个bytes

内核代码,lib目录中:

int strncmp(const char *cs, const char *ct, size_t count)
{unsigned char c1, c2;while (count) {c1 = *cs++;c2 = *ct++;if (c1 != c2)return c1 < c2 ? -1 : 1;if (!c1)break;count--;}return 0;
}

这是size_t的类型

typedef long unsigned int size_t;

原理:取两个字符串的值逐个比较,只有当c1 !=  c2 时判断c1和c2谁大,这里的大小是ASCII值

如下:

A,a,b,c在ASCII表中对应的十进制值分别是65,97,98,99

strncmp(a, b, 2):起初,c1和c2都是"A",两者相等,且  !c1 = 0,执行count--,

第二个字符比较时,c1 = c = 99,c2 = a = 97,条件c1 != c2为真,执行

return c1 < c2 ? -1 : 1; 因为c1 > c2,所以返回1

其余两个比较原理一致

#include <stdio.h>
#include <string.h>
void main(){char *a = "Ac";char *b = "Aa";char *c = "ba";char *d = "Ac";printf("strncmp(a, b, 2) : %d\n", strncmp(a, b, 2));printf("strncmp(a, c, 2) : %d\n", strncmp(a, c, 2));printf("strncmp(a, d, 2) : %d\n", strncmp(a, d, 2));
}

VC++6.0中的返回值:

Linux中的返回值:

好奇怪哦,为啥会不一样,按照源码来说返回值应该只有0,-1,1才对啊,而Linux下还是返回ASCII值的差值,man手册中的说明也是和strcmp一样返回ASCII差值

最后我发现,在内核代码中同一个函数,在不同文件中的定义也不完全一样,可能是体系不同导致的吧。像strcmp就是有两种定义,一个是返回0,-1,1。一个定义返回ASCII差值

证据在这儿:

lib目录下定义

arch\x86\boot目录下定义

不过返回值是什么对我们影响都不大,我们只是用这些函数判断比较部分是否相等,只要不是0就表示不相等,管他0,-1,1和ASCII差值呢

C语言-str家族之strncmp相关推荐

  1. 【str家族】如何使用处理字符和字符串的库函数

    本文收录于专栏:C语言进阶 关注作者,持续阅读作者的文章,学习更多知识! https://blog.csdn.net/weixin_53306029?spm=1001.2014.3001.5343 C ...

  2. c语言str相关的函数

    C语言str系列库函数在不同的库中有不同的实现方法,但原理都是一样的.因为库函数都是没有进行入口参数检查的,并且str系列库函数在面试中经常容易被面试官喊在纸上写某一个函数的实现,因此本文参考了Ope ...

  3. C语言str系列库函数

    C语言str系列库函数在不同的库中有不同的实现方法,但原理都是一样的.因为库函数都是没有进行入口参数检查的,并且str系列库函数在面试中经常容易被面试官喊在纸上写某一个函数的实现,因此本文参考了Ope ...

  4. 「杂谈」如何写好R语言apply家族函数

    感觉好久没发有关R语言的博客了.这一年来,我着手开发了两个R包,但基本没怎么发博客. 原因也很简单,可能是我个人的私心吧,或者说是典型的"理论研究者"的"通病" ...

  5. c语言编程题笔试 博客,【笔试题】C语言:模拟实现strncmp

    [函数原型]int strncmp ( const char * str1, const char * str2, size_t num ); [返回值] 若str1与str2的前n个字符相同,则返回 ...

  6. R语言——str函数

    str函数 structure,紧凑地显示对象内部结构,即对象里有什么.

  7. c 语言str.size,C/C++ strlen(str)和str.length()和str.size()的区别

    strlen(str)和str.length()和str.size()都可以求字符串长度,返回字符串中字符的长度,不包括'/0'. 其中str.length()和str.size()是同义词,返回同样 ...

  8. c语言str系列函数

    qsort() str系列函数 isalpha() 1,qsort() 功能: 快速排序,其时间复杂度为n*log(n) 头文件: <stdlib.h> 声明: void qsort(vo ...

  9. str开头的c语言函数介绍,C语言str函数系列

    1.strcat() 此函数原型为 char *strcat(char *dest, const char *src). 功能为连接两个字符串,把src连接到dest后面:返回dest地址 实现如下 ...

最新文章

  1. velocity入门(三) 注释
  2. ZOUNDRY TEST
  3. html5基础知识文档,HTML5基础知识(1)
  4. 区块链系统之《一种基于区块链的云数据共享方法》
  5. softmax实现cifar10分类
  6. 自用Excel VBA技巧整理
  7. jquery mobile页面切换效果(Flip toggle switch)(注:jQuery移动使用的数据属性的列表。 )...
  8. 谈谈 JDK 和 SAPMachine 的关系
  9. 试卷分析计算机基础,计算机基础试卷分析.doc
  10. 公司内外网同时使用方法
  11. Mineros 远程登录,外网登录,解决无法在家控制机器的问题
  12. 服务器修复工具,Microsoft .NET Framework 修复工具可用
  13. AWSome Day简介
  14. word的图片和自选图形组合问题
  15. 无领导小组讨论面试真题解析(四)
  16. 【友盟+】于晓航:大数据“格物致知”
  17. render createElement JSX
  18. Android80go平台的桌面布局(带gms)
  19. 北京电子科技学院计算机考研资料汇总
  20. 【IoT】基于NB-IoT的LWM2M协议浅析

热门文章

  1. centos忘记root密码怎么办
  2. 如何从 0 到 1 搭建性能检测系统(修正版)
  3. ArcGIS VS QGIS——两者之间的27点比较上篇(译)
  4. 计算机基础公开课案例,大学计算机基础案例教学与教学案例的设计
  5. 一篇文章牢记C/C++指针和引用区别
  6. oneinstack php报错,快速环境部署–OneinStack | 文艺数学君
  7. 无聊猿如何成了「元宇宙」的基础?
  8. 日期 Deta SimpleDate calendar知识
  9. 2019新悦动打火困难解决了吗_悦动深陷启动困难 北京现代不闻不问
  10. NFT 的周期轮转:野生→泡沫→价值回归