MySQL数据库BUG导致查询不到本该查到的数据
在数据库的日常使用中,我们常常会遇到一些看似匪夷所思的查询问。最近就看到一个因为MySQL BUG导致无法查到本该查询到数据的案例。
1. 问题背
数据库版本:MySQL8.0.40
假设我们创建了一个名为 product_info
的表,用于存储产品的相关信息。该表包含三个字段:product_id
(产品编号)、category_id
(类别编号)和 brand_id
(品牌编号)。其中,product_id
被设置为主键,并且采用降序排列。
CREATE TABLE product_info( product_id VARCHAR(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '产品编号', category_id VARCHAR(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类别编号', brand_id VARCHAR(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌编号', PRIMARY KEY(`product_id` DESC), KEY `idx_brand_id`(`brand_id`), KEY idx_category_id(category_id))DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
以下是创建表的 SQL 语句:随后,我们向表中插入了一些数据:
INSERT INTO product_info VALUES('P001','C01','B02'),('P002','C02','B01'),('P003','C02','B01'),('P004','C01','B02'),('P005','C03','B01'),('P006','C03','B01');
数据插入完成后,我们进行了两次查询操作。第一次查询是筛选出 category_id
为 C02
的记录:
SELECT * FROM product_info WHERE category_id='C02';
这次查询正常返回了两条记录,结果如下:
+------------+-------------+----------+| product_id | category_id | brand_id |+------------+-------------+----------+| P003 | C02 | B01 || P002 | C02 | B01 |+------------+-------------+----------+
然而,当我们进行第二次查询,增加了 brand_id
为 B01
的条件时:
mysql> SELECT * FROM product_info WHERE category_id='C02' AND brand_id='B01';Empty set (0.00 sec)
本应返回上述两条记录,但实际结果却为空集,这显然与预期不符。
2. 问题分析及排查
2.1 字符集和校对规则方面
表和字段都采用了 utf8mb4_general_ci
字符集和校对规则。通常情况下,对于数字和字母组成的字符串比较,这种校对规则不会出现问题。但我们不能排除隐式类型转换或者存在不可见字符的可能性。为了验证这一点,我们可以使用 HEX
函数查看 brand_id
的实际存储值:
SELECT product_id, category_id, brand_id, HEX(brand_id) FROM product_info WHERE category_id='C02';
如果 brand_id
的值确实是 B01
,那么 HEX
函数的结果应该是 423031
。若结果中出现其他字符,比如尾随空格,可能会导致比较时出现不匹配的情况。但是此案例明显不是。
2.2 索引相关问题
- 索引选择问题
当执行组合条件查询时,优化器可能会选择不合适的索引。对于
SELECT * FROM product_info WHERE category_id='C02' AND brand_id='B01'
这个查询,优化器可能只选择了idx_category_id
或idx_brand_id
其中一个索引,从而无法有效地结合两个条件进行查询。
mysql> SELECT * FROM product_info FORCE INDEX (idx_category_id) WHERE category_id='C02' AND brand_id='B01';+------------+-------------+----------+| product_id | category_id | brand_id |+------------+-------------+----------+| P003 | C02 | B01 || P002 | C02 | B01 |+------------+-------------+----------+2 rows in set (0.00 sec)
mysql> SELECT * FROM product_info FORCE INDEX (idx_brand_id) WHERE category_id='C02' AND brand_id='B01';+------------+-------------+----------+| product_id | category_id | brand_id |+------------+-------------+----------+| P003 | C02 | B01 || P002 | C02 | B01 |+------------+-------------+----------+
可见强制走其中一个索引都能正常
- 索引合并问题
以上可以看出优化器选择使用索引合并(如
index merge intersect
),将idx_category_id
和idx_brand_id
的结果合并,但由于主键降序排列等因素,可能会导致两个索引的结果无法正确交集,进而出现查询结果为空的情况。因此我们关闭index_merge_intersection或者index_merge测试一下:
mysql> SET optimizer_switch='index_merge_intersection=off';Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM product_info FORCE INDEX (idx_brand_id) WHERE category_id='C02' AND brand_id='B01';+------------+-------------+----------+| product_id | category_id | brand_id |+------------+-------------+----------+| P003 | C02 | B01 || P002 | C02 | B01 |+------------+-------------+----------+2 rows in set (0.00 sec)
关闭后确实可以了。另外关闭
2.3 主键降序排列的影响
- 二级索引结构
主键采用降序排列可能会对二级索引的存储结构和扫描方向产生影响。在查询时,可能会因为这种影响导致索引无法正常工作,从而无法正确检索到符合条件的记录。
我们建一张product_info2表,再导入原样的数据,再查询一遍
mysql> CREATE TABLE product_info2( -> product_id VARCHAR(32) COLLATE utf8mb4_general_ci NOT NULL COMMENT '产品编号', -> category_id VARCHAR(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类别编号', -> brand_id VARCHAR(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '品牌编号', -> PRIMARY KEY(`product_id` ), -> KEY `idx_brand_id`(`brand_id`), -> KEY idx_category_id(category_id) -> ) -> DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;Query OK, 0 rows affected (0.01 sec)
mysql> insert into product_info2 select * from product_info;Query OK, 6 rows affected (0.01 sec)Records: 6 Duplicates: 0 Warnings: 0
mysql> SET optimizer_switch='index_merge_intersection=off';Query OK, 0 rows affected (0.00 sec)
mysql> SET optimizer_switch='index_merge_intersection=on';Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM product_info WHERE category_id='C02' AND brand_id='B01';Empty set (0.00 sec)
mysql> SELECT * FROM product_info2 WHERE category_id='C02' AND brand_id='B01';+------------+-------------+----------+| product_id | category_id | brand_id |+------------+-------------+----------+| P002 | C02 | B01 || P003 | C02 | B01 |+------------+-------------+----------+2 rows in set (0.00 sec)
通过对比可以发现,修改为非降序索引后确实也正常了。
2.4 MySQL 版本兼容性
不同的 MySQL 版本对降序索引的支持和处理方式可能存在差异。某些旧版本可能存在与降序索引相关的 bug,导致在使用降序主键和二级索引进行查询时出现问题。出现问题的版本是MySQL8.0.40,我们用最新的MySQL8.0.41(截止当前最新版本)再看一下,发现新版本已经解决
3. 小结
通过以上案例及分析,最终有如下建议:
尽量不要使用降序主键,如需使用降序特性,建议创建二级索引解决
如非必要不要开启index_merge或index_merge_intersection,以免导致性能问题或检索错误问题,如果需要,可以考虑先建组合索引解决
以上案例和数据自身也有关系,只是部分数据会出现此情况,大家如需复现可以用我案例中的数据进行测试
往期精彩回顾
1. MySQL高可用之MHA集群部署
2. mysql8.0新增用户及加密规则修改的那些事
3. 比hive快10倍的大数据查询利器-- presto
4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库
5. PostgreSQL主从复制--物理复制
6. MySQL传统点位复制在线转为GTID模式复制
7. MySQL敏感数据加密及解密
8. MySQL数据备份及还原(一)
9. MySQL数据备份及还原(二)
扫码关注
相关文章:
MySQL数据库BUG导致查询不到本该查到的数据
在数据库的日常使用中,我们常常会遇到一些看似匪夷所思的查询问。最近就看到一个因为MySQL BUG导致无法查到本该查询到数据的案例。 1. 问题背 数据库版本:MySQL8.0.40 假设我们创建了一个名为 product_info 的表,用于存储产品的相关信息。该…...
Dubbo(25)如何配置Dubbo的协议和端口?
配置Dubbo的协议和端口是设置分布式服务通信的基础步骤。Dubbo支持多种协议(如Dubbo、RMI、HTTP等),你可以根据需求选择合适的协议并配置相应的端口。下面以一个完整的Spring Boot项目为例,详细介绍如何配置Dubbo的协议和端口。 …...
服务器磁盘卷组缓存cache设置介绍
工具1: storcli a. 确认软件包是否安装 [rootlocalhost ~]#rpm -qa | grep storcli storcli-1.21.06-1.noarch 备注:若检索结果为空,需要安装对应的软件安装包。安装命令如下: #rpm -ivh storcli-xx-xx-1.noarch.rpm b. 查看逻辑…...
StarVector:开启多模态SVG生成的新纪元——开源AI模型的革新之作
在AI技术蓬勃发展的今天,图像生成模型已不再局限于像素级的输出。StarVector作为一款开源的多模态SVG生成模型,凭借其独特的代码与视觉融合能力,正在重新定义矢量图形的创作方式。它不仅让图像生成更灵活、更轻量化,还为设计师、开…...
MySQL日期时间函数
函数分类 函数名 功能描述 语法示例 获取当前日期和时间 NOW() 返回包含年、月、日、时、分、秒的完整时间戳,格式为 YYYY-MM-DD HH:MM:SS SELECT NOW(); CURDATE() / CURRENT_DATE() 获取当前日期,格式为 YYYY-MM-DD SELECT CURDATE(); 或 SE…...
WinSCP使用教程:(SFTP、SCP、FTP 和 WebDAV)
WinSCP 是一款免费开源的 Windows 环境下的 SFTP、SCP、FTP 和 WebDAV 客户端,主要用于在本地计算机与远程服务器之间安全地传输文件,并提供基本的文件管理功能。 WinSCP是Windows环境下使用SSH的开源图形化的SFTP的客户端 SSH 的全称是 Secure Shell&…...
备份是个好习惯
##解题思路 首先看到题目说备份是个好习惯,说明可能存在备份文件泄露 用dirsearch或者其他的目录扫描工具扫一扫,发现两个网址状态码正常,其中一个刚好是.bak的备份文件 至于flag文件,无法读取源码,都是空的 下载备份…...
centos 7 LVM管理命令
物理卷(PV)管理命令 pvcreate:用于将物理磁盘分区或整个磁盘创建为物理卷。 示例:sudo pvcreate /dev/sdb1 解释:将 /dev/sdb1 分区创建为物理卷。 pvdisplay:显示物理卷的详细信息,如大小、所属…...
使用 Spring Boot 3.2 集成 MinIO 8.5:实现高效对象存储
摘要 MinIO 是一款高性能的分布式对象存储服务,与云原生应用完美契合。本文将手把手教你如何在 Spring Boot 3.2 项目中集成 MinIO 8.5 版本,实现文件上传、下载和删除等核心功能,并提供完整代码示例和常见问题解决方案。 一、环境准备 JDK …...
【Qt】数据库管理
数据库查询工具开发学习笔记 一、项目背景与目标 背景:频繁编写数据库查询语句,希望通过工具简化操作,提升效率。 二、总体设计思路 1. 架构设计 MVC模式:通过Qt控件实现视图(UI),业务逻辑…...
C#:Time.deltaTime
目录 第一性原理:从最基本的问题开始 什么是Time.deltaTime? 1. 什么是“帧”? 2. 什么是“帧率”? 为什么需要它? 一个生活化的例子 更通俗的类比 在Unity中的特殊性 第一性原理:从最基本的问题开…...
鸿蒙富文本实践
01 鸿蒙中的文本展示-Text组件 Text 组件的普通用法和其他语言一样,可以直接使用字符串Text(我是一段文本) 通过点语法设置文本样式: Text(我是超长文本,超出的部分显示省略号。I am an extra long text, with ellipses displayed for any ex…...
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号 文章目录 【字符设备驱动开发–IMX6ULL】(二)Linux 设备号1 设备号的组成2.设备号的分配 1 设备号的组成 为了方便管理,Linux 中每个设备都有一个设备号,设…...
Elasticsearch-实战案例
一、没有使用Elasticsearch的查询速度698ms 1.数据库模糊查询不走索引,在数据量较大的时候,查询性能很差。需要注意的是,数据库模糊查询随着表数据量的增多,查询性能的下降会非常明显,而搜索引擎的性能则不会随着数据增…...
电子文档安全管理系统V6.0接口backup存在任意文件下载漏洞
免责声明:本号提供的网络安全信息仅供参考,不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我联系,我将尽快处理并删除相关内容。 漏洞描述 电子文档安全管理系统 V6.0 reso…...
jmeter web压力测试 压测
下载地址 Apache JMeter - Download Apache JMeter 1. 设置线程组 2. 设置http请求头 3. 设置http请求体 4. 设置结果条目 常用函数 ${__RandomString(8, abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)}${__javaScript( ${__Random(1000, 10000)} /…...
FPGA学习篇——Verilog学习之寄存器的实现
1 寄存器理论 这里在常见的寄存器种加了一个复位信号sys_rst_n。(_n后缀表示复位信号低电平有效,无这个后缀的则表示高电平有效) 这里规定在时钟的上升沿有效,只有当时钟的上升沿来临时,输出out 才会改变,…...
CXL UIO Direct P2P学习
前言: 在CXL协议中,UIO(Unordered Input/Output) 是一种支持设备间直接通信(Peer-to-Peer, P2P)的机制,旨在绕过主机CPU或内存的干预,降低延迟并提升效率。以下是UIO的核心概念及UI…...
一键实现:谷歌表单转word(formtoword)
一键将 Google Forms 转换为 Word,最简单的方法 有些繁琐的工作让人倍感挫败,明明 应该 可以自动化。你精心制作了一份 Google Forms,收集了数据,现在需要在 Word 文档中分享其结构或内容。于是,你只能手动复制粘贴问…...
QT第六课------QT界面优化------QSS
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
一套SaaS多租户医疗云his源码,基于云计算的医院信息管理系统(云HIS)
基于云计算的医院信息管理系统(云HIS),通过SaaS服务模式提供。这种云HIS系统设计考虑了模板化、配置化、智能化和可扩展性,覆盖了基层医疗机构的核心工作流程,并且能够与监管系统无缝对接,满足未来的扩展需…...
DGNN-YOLO:面向遮挡小目标的动态图神经网络检测与追踪方法解析
一、算法结构与核心贡献 1.1 文章结构 采用经典五段式结构: 引言:分析智能交通系统(ITS)中小目标检测与追踪的挑战,提出研究动机。相关工作:综述小目标检测(YOLO系列、Faster R-CNN)、目标追踪(SORT、Transformer)和图神经网络(GNN)的进展。方法论:提出DG…...
淘宝获取商品sku详情API接口如何调用?
以下是调用淘宝开放平台/万邦开放平台获取商品SKU详情API接口的具体步骤和示例: 一、API名称及参数 API名称:taobao.item.sku.get主要功能:获取指定商品SKU的详细信息,包括属性、价格、库存等。关键参数: num_iid&am…...
JavaScript 中的原型链与继承
JavaScript 是一种基于原型的编程语言,这意味着它的对象继承是通过原型链而非类的机制来实现的。原型链是 JavaScript 中对象与对象之间继承属性和方法的基础。本文将深入探讨 JavaScript 中的原型链和继承机制,帮助你理解这一重要概念。 一、原型&…...
晶晨S905L3A(B)-安卓9.0-开启ADB和ROOT-支持IPTV6-支持外置游戏系统-支持多种无线芯片-支持救砖-完美通刷线刷固件包
晶晨S905L3A(B)-安卓9.0-开启ADB和ROOT-支持IPTV6-支持外置游戏系统-支持多种无线芯片-支持救砖-完美通刷线刷固件包 适用型号:M401A、CM311-1a、CM311-1sa、B863AV3.1-M2、B863AV3.2-M、UNT403A、UNT413A、M411A、E900V22C、E900V22D、IP112H等等晶晨S905L3A(B)处…...
【MYSQL】Windows 下 CMD 操作数据库指南
0. 引言 在数据库的日常操作中,掌握通过 Windows 下的命令行工具(CMD)连接并操作数据库是一项重要技能。本指南将带您逐步完成 MYSQL 数据库的基本操作,包括使用 CMD 登录数据库、选择目标数据库、查看所有数据表,以及…...
RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (mmap)
RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 mmap… 查看相机信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相机分辨率,输出格式等信息,对应修改后续代码测试… Driver Info:Driver name : rkcif…...
【多线程】单例模式和阻塞队列
目录 一.单例模式 1. 饿汉模式 2. 懒汉模式 二.阻塞队列 1. 阻塞队列的概念 2. BlockingQueue接口 3.生产者-消费者模型 4.模拟生产者-消费者模型 一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心思想是确保…...
批量将 PDF 文档中的图片提取到指定文件夹
在 PDF 文档中,我们经常需要插入图片来丰富页面内容。然而,当我们需要提取 PDF 文件中的图片时,手动操作会显得非常繁琐。通常我们需要逐页打开 PDF,手动保存每一张图片,这不仅耗时,而且浪费精力。今天&…...
在bootstrap下实现万年历
因为开一个易经学习平台,开发了一个万年历,界面如下: 效果可以看:易学 相关代码: <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&qu…...
基于python大数据的旅游可视化及推荐系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...
DeepSeek绘画工程与第三方通道整合架构解析
DeepSeek绘画工程与第三方通道整合架构解析 目录 系统架构设计技术实现细节核心功能模块创新点与优化策略运行效果展示总结与展望 一、系统架构设计 1.1 整体架构图(Mermaid) #mermaid-svg-EcuBlWPPCbUHg0gx {font-family:"trebuchet ms",v…...
单元测试的编写
Python 单元测试示例 在 Python 中,通常使用 unittest 模块来编写单元测试。以下是一个简单的示例: 示例代码:calculator.py # calculator.py def add(a, b):return a bdef subtract(a, b):return a - b 单元测试代码:test_c…...
附录C SLAC匹配过程命令定义与实际抓包
附录C SLAC匹配过程命令定义与实际抓包 ISO15118-3 附录A中规定了SLAC匹配过程中的请求命令及应答, 本文将会对比协议中的定义和实际抓包内容,以便读者获得直观的认识。 1 CM_SET_KEY.REQ 定义内容: 实际数据: 注意报文中的 08…...
数据结构 KMP 字符串匹配算法
KMP算法是计算机科学中的一种字符串匹配算法,KMP是三个创始人名字首字母 题目 AcWing - 算法基础课 前置知识点 KMP算法是一种高效的字符串匹配算法,算法名称取自于三位共同发明人名字的首字母组合。该算法的主要使用场景就是在字符串(也叫…...
从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.3.2参数高效微调:LoRA与适配器(Adapter)技术
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 从零构建大语言模型全栈开发指南 -第三部分:训练与优化技术-3.3.2 参数高效微调:LoRA与适配器(Adapter)技术1. 参数高效微调(PEFT)的背景与意义2. LoRA(低秩适配器)技术详解2.1 核心原理与数学表…...
YOLOv8-YOLO12目标检测模型的标签格式和数据结构详细说明
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
从零开始学习SQL
1.1 MySQL概述 1. 数据管理技术的发展过程 数据库技术是应数据管理任务的需要而产生的 a. 什么是数据管理 ** 对数据进行收集、分类、组织、编码、存储、检索和维护一系列活动的总和 **b. 数据管理技术的发展过程 人工管理阶段(20世纪50年代中之前)…...
北斗导航 | 基于因子图优化的GNSS/INS组合导航完好性监测算法研究,附matlab代码
以下是一篇基于因子图优化(FGO)的GNSS/INS组合导航完好性监测算法的论文框架及核心内容,包含数学模型、完整Matlab代码及仿真分析基于因子图优化的GNSS/INS组合导航完好性监测算法研究 摘要 针对传统卡尔曼滤波在组合导航完好性监测中对非线性与非高斯噪声敏感的问题,本文…...
深入剖析 JVM:从组成原理到调优实践
深入剖析 JVM:从组成原理到调优实践 深入剖析 JVM:从组成原理到调优实践一、JVM 组成架构:运行 Java 程序的 “幕后引擎”1.1 内存结构:数据存储的 “分区管理”1.2 执行引擎:字节码的 “翻译官”1.3 本地方法接口&…...
rust学习笔记21-闭包
在 Rust 中,闭包(Closures) 是一种可以捕获其环境中的变量的匿名函数。它们非常灵活,既可以作为普通函数使用,也可以捕获和操作定义它们的作用域中的变量。闭包是 Rust 中处理短小逻辑代码块的强大工具,特别…...
Redis常见面试问题汇总
Redis 面试笔记整理 一、Redis 基础知识1. Redis 概述Redis 是什么?主要特点有哪些?Redis 和 Memcached 的区别是什么?Redis 是单线程还是多线程?为什么单线程还能高效?Redis 6.0 之后的多线程模型是怎样的?…...
网络安全中的“后门”:概念、类型、作用与攻防技术
目录 什么是后门? 后门的常见类型 2.1 按植入方式分类 2.2 按功能分类 后门在安全测试中的作用 后门的玩法与免杀技术 4.1 常见后门技术 4.2 如何实现免杀(Bypass AV) 如何检测和防御后门? 总结 1. 什么是后门ÿ…...
AIGC1——AIGC技术原理与模型演进:从GAN到多模态融合的突破
引言 近年来,人工智能生成内容(AIGC)技术迅速发展,从早期的简单文本生成到如今能够创作高质量图像、视频甚至3D内容,其核心驱动力在于生成模型的持续优化与多模态融合技术的突破。本文将探讨生成对抗网络(…...
Python爬虫-爬取大麦网演出详情页面数据
前言 本文是该专栏的第50篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以大麦网平台为例。基于Python,实现获取演出详情页面的演出信息。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内…...
opencv图像处理之指纹验证
一、简介 在当今数字化时代,生物识别技术作为一种安全、便捷的身份验证方式,正广泛应用于各个领域。指纹识别作为生物识别技术中的佼佼者,因其独特性和稳定性,成为了众多应用场景的首选。今天,我们就来深入探讨如何利…...
玛卡巴卡的k8s知识点问答题(五)
17. Init 类型容器有什么特点,主要用途? 特点: 启动顺序:Init 容器在普通容器启动之前运行,必须先完成所有 Init 容器后,Pod 的主容器才会启动。 顺序执行:如果定义了多个 Init 容器ÿ…...
怎样提升大语言模型(LLM)回答准确率
怎样提升大语言模型(LLM)回答准确率 目录 怎样提升大语言模型(LLM)回答准确率激励与规范类知识关联类情感与语境类逆向思维类:为什么不,反面案例群体智慧类明确指令类示例引导类思维引导类约束限制类反馈交互类:对话激励与规范类 给予奖励暗示:在提示词中暗示模型如果回…...
CSP-J2022 山东 题解
[CSP-J2022 山东] 植树节 题目背景 受疫情影响,山东省取消了 CSP-J 2022 认证活动,并于次年三月重新命题,在省内补办比赛。 题目描述 植树节快要到了,学校要组织志愿者去给树苗浇水。 有一排树苗,编号依次是 0 ,…...
strcpy和strncpy和strcat和strncat和strstr和strtok函数使用及实现
目录 strcpy和strncpy函数的原理及实现 strcpy函数 my_strcpy优化代码 函数返回值的疑惑 strncpy函数 strncpy自定义 完整代码 字符串追加函数 strcat和strncat strcat函数 讲解和使用 过程解析 strcat代码 strcat无法给自己追加 strncat函数 讲解和使用 过程解…...