首页 > 编程语言 >strncmp源码,及其在含0x00字符数组中的使用问题

strncmp源码,及其在含0x00字符数组中的使用问题

时间:2023-11-23 09:13:07浏览次数:39  
标签:strncmp ++ 0x0 0x00 unsigned char 源码 c2 c1

源码

结论,strncmp不能在比较字符数组中同一位置可能均为0x00时使用。

#include <string.h>

int STRNCMP(const char *s1, const char *s2, size_t n)
{
    unsigned char c1 = '\0';
    unsigned char c2 = '\0';
    if (n >= 4)
    {
        size_t n4 = n >> 2;
        do
        {
            c1 = (unsigned char)*s1++;
            c2 = (unsigned char)*s2++;
            if (c1 == '\0' || c1 != c2)
                return c1 - c2;
            c1 = (unsigned char)*s1++;
            c2 = (unsigned char)*s2++;
            if (c1 == '\0' || c1 != c2)
                return c1 - c2;
            c1 = (unsigned char)*s1++;
            c2 = (unsigned char)*s2++;
            if (c1 == '\0' || c1 != c2)
                return c1 - c2;
            c1 = (unsigned char)*s1++;
            c2 = (unsigned char)*s2++;
            if (c1 == '\0' || c1 != c2)
                return c1 - c2;
        } while (--n4 > 0);
        n &= 3;
    }
    while (n > 0)
    {
        c1 = (unsigned char)*s1++;
        c2 = (unsigned char)*s2++;
        if (c1 == '\0' || c1 != c2)
            return c1 - c2;
        n--;
    }
    return c1 - c2;
}

问题出现在执行下面的程序,字符不同但结果为0,找到源码一看便知:当比较的字符均为0x00会以 return 0结束,和字符全部相同结果一致。

int main()
{
    char a[16] = {0xeb, 0x20, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe};
    char b[16] = {0xeb, 0x20, 0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xbe};
    int res = STRNCMP(a, b, 16);
    printf("%d\n", res);

    return 0;
}

标签:strncmp,++,0x0,0x00,unsigned,char,源码,c2,c1
From: https://www.cnblogs.com/j-c-y/p/17850787.html

相关文章

  • python004超市购物系统-计算机毕业设计源码+LW文档
    摘 要随着国内市场经济这几十年来的蓬勃发展,突然遇到了从国外传入国内的互联网技术,互联网产业从开始的群众不信任,到现在的离不开,中间经历了很多挫折。从当初的传统销售行业抵制互联网销售,到现在传统销售与网络销售的结合模式,都代表着网络购物是一种潮流,是线下实体经济的补充,不再......
  • python005基于BS架构的在线学习与推荐系统-计算机毕业设计源码+LW文档
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本在线学习与推荐系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率......
  • NS-3源码学习(三)Pcap文件分析
    NS-3源码学习(三)Pcap文件分析Pcap文件生成NS-3生成.pcap文件相关函数有EnablePcap()和EnalePcapAll(),支持第一个函数的类有ns3::YansWifiPhyHelperPointToPointEmuHelperCsmaHelper支持第二个函数的类有ns3::YansWifiPhyHelperPointToPointInternetStackHelper......
  • 大学生社会实践申报系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,大学生社会实践申报系统就是信息时代变革中的产物之一。任何系统都要遵循系统设......
  • Linux系统源码安装node和npm
    系统:CentOS7.964bit一、创建安装文件夹mkdir/opt/nodejs二、下载node下载地址https://nodejs.org/en/download/里面找右键可以复制链接地址cd/opt/nodejswgethttps://nodejs.org/dist/v20.9.0/node-v20.9.0.tar.gz下载成功可以看到多个node-v20.9.0.tar.gz文件......
  • Spring Cloud +UniApp +MySql框架开发的智慧工地云平台源码
    智慧工地是指通过信息化技术、物联网、人工智能技术等手段,对建筑工地进行数字化、智能化、网络化升级,实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量,降低施工成本,是建筑行业数字化转型升级的重要抓手。主要围绕“人......
  • 直播app源码,默认显示搜索框 保留搜索条件
    直播app源码,默认显示搜索框保留搜索条件<template> <div:class="{'show':show}">  <svg-iconclass-name="search-icon"icon-class="search"@click.stop="click"/>  <el-select   ref="headerSear......
  • 【Java】乡镇卫生院、社区卫生服务中心云HIS源码
    云HIS采用云端SaaS服务的方式提供,用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医院机构的主要工作流程,能够与监管系统有序对接,并能满足系统后期扩展的需要。一、医保数据上传医保数据上传是将......
  • Java的Integer.bitCount()源码分析
    本文部分参考:https://blog.csdn.net/weixin_42092787/article/details/106607426常规解法对于统计一个32位的二进制数值当中1的数量这个问题,常规解法如下:publicinthammingWeight(intn){intcount=0;for(inti=0;i<32;i++){n......
  • 基于springboot的校园失物招领系统-计算机毕业设计源码+LW文档
    校园失物招领系统介绍在现代大学校园中,失物招领系统是一个至关重要的组成部分,旨在为学生、教职员工和访客提供便捷的失物招领服务。本文将介绍一个基于SpringBoot的校园失物招领系统,该系统结合了现代技术和用户友好的界面,提供了高效、安全和快速的失物招领流程。系统架构该系统采......