新闻详情

新闻详情

首页 / 资讯中心 / 详情

【c++随笔28】strcmp 和 memcmp对比

发布时间:2026/10/2 1:41:29来源:尧图网络
【c++随笔28】strcmp 和 memcmp对比
【c随笔28】strcmp 和 memcmp对比1. 功能对比2. 函数原型3. 参数、返回值4. 操作行为5. 使用场景6. 错误处理8. 性能与优化9. 示例总结原创作者郑同学的笔记原文链接https://zhengjunxue.blog.csdn.net/article/details/144635301strcmp 和 memcmp 是 C 标准库中的两个函数它们的功能类似都是进行比较操作但它们的应用场景和行为有所不同。以下是这两个函数的对比1. 功能对比strcmp用于比较两个字符串的字面值。它逐字符地比较两个字符串直到找到不同的字符或者遇到字符串的结束符 \0 为止。memcmp用于比较两个内存区域的内容。它逐字节比较两个内存区域的内容比较的是内存中的每个字节而不关心是否是字符串即是否以 \0 结尾。2. 函数原型strcmpintstrcmp(constchar*str1,constchar*str2);比较两个字符串的字面值从头到尾直到遇到结束符 \0。memcmpintmemcmp(constvoid*ptr1,constvoid*ptr2,size_t num);比较两个内存区域每个字节比较的长度由 num 参数指定。3. 参数、返回值参数说明strcmpstr1指向第一个字符串的指针。str2指向第二个字符串的指针。memcmpptr1指向第一个内存区域的指针。ptr2指向第二个内存区域的指针。num要比较的字节数。返回值strcmp如果两个字符串相等返回 0如果 str1 小于 str2返回负值如果 str1 大于 str2返回正值。memcmp如果 ptr1 和 ptr2 相等返回 0如果 ptr1 小于 ptr2返回负值如果 ptr1 大于 ptr2返回正值。4. 操作行为strcmp字符串比较它按字符逐个比较 str1 和 str2 的内容直到找到第一个不同的字符或者遇到字符串结束符 \0。只适用于字符串strcmp 专门用于比较字符串因此它假定输入的 str1 和 str2 都是以 \0 结尾的字符数组C 字符串。memcmp内存比较它按字节逐个比较两个内存区域的内容比较的是原始内存数据。不关心数据类型memcmp 比较的是内存块的原始字节不管这些字节是否是有效的字符串也不管这些字节所代表的数据类型是什么。5. 使用场景strcmp用于比较字符串的内容。它适用于判断两个字符串是否相等、哪个字符串字典序较大或较小。比如检查两个字符串是否相同或者在排序时进行字符串的比较。memcmp用于比较任意类型的内存块。它适用于比较结构体、数组、缓冲区等原始内存数据不仅仅限于字符串。比如比较两个二进制数据块是否相等或者比较数组、结构体等数据结构的内容。6. 错误处理strcmp如果输入的两个字符串没有以 \0 结尾strcmp 的行为是未定义的因为它会继续读取超出字符串范围的内存。适用于 C 字符串以 \0 结尾的字符数组。memcmp如果输入的两个内存区域有重叠memcmp 的行为是未定义的对于重叠内存区域应使用 memmove。memcmp 不关心数据类型可以用于任何类型的数据只要知道要比较的字节数。8. 性能与优化strcmp由于它逐个字符比较性能与字符串的长度成正比。在比较过程中strcmp 会在遇到第一个不同的字符或者遇到字符串结束符时停止因此在最好的情况下它的性能与字符串的长度是线性关系。memcmp逐字节比较内存区域的内容性能与比较的字节数成正比。memcmp 可以用于比较任意类型的数据包括结构体、数组等且它的性能通常较好特别是在处理大数据块时。9. 示例strcmp 示例#includeiostream#includecstringintmain(){constchar*str1Hello;constchar*str2Hello;constchar*str3World;// 比较相等的字符串if(strcmp(str1,str2)0){std::coutstr1 and str2 are equal.std::endl;}else{std::coutstr1 and str2 are not equal.std::endl;}// 比较不相等的字符串if(strcmp(str1,str3)0){std::coutstr1 and str3 are equal.std::endl;}else{std::coutstr1 and str3 are not equal.std::endl;}return0;}memcmp 示例#includeiostream#includecstringintmain(){intarr1[]{1,2,3};intarr2[]{1,2,3};intarr3[]{1,2,4};// 比较两个相同的数组if(memcmp(arr1,arr2,sizeof(arr1))0){std::coutarr1 and arr2 are equal.std::endl;}else{std::coutarr1 and arr2 are not equal.std::endl;}// 比较两个不同的数组if(memcmp(arr1,arr3,sizeof(arr1))0){std::coutarr1 and arr3 are equal.std::endl;}else{std::coutarr1 and arr3 are not equal.std::endl;}return0;}总结特性strcmpmemcmp比较内容比较字符串以 \0 结尾的字符数组比较内存区域按字节比较的结束条件遇到 \0 或不同字符时停止比较指定的字节数完全按照字节进行比较返回值如果字符串相等返回 0否则返回非零值如果内存区域相等返回 0否则返回非零值使用场景比较字符串判断字符串是否相等、字典序大小比较任何内存区域的数据如结构体、数组等错误处理字符串必须以 \0 结尾未以 \0 结尾时未定义内存区域不能重叠若重叠应使用 memmovestrcmp 专门用于字符串比较适用于字符数组的比较。memcmp 适用于比较任意类型的内存数据不关心数据的具体类型。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于深度学习的股票价格预测与量化策略:Python源码与回测避坑指南 2026/10/2 2:36:54

基于深度学习的股票价格预测与量化策略:Python源码与回测避坑指南

简介:这是一套面向计算机相关专业学生与量化投资初学者的深度学习实战项目资料,围绕股票价格预测与量化策略研究展开,可作为毕业设计、课程设计或期末大作业的完整参考方案。资源包共收录1409个文件,以636个Python源码与671个编译…

阅读更多 →
Servlet+JSP学生管理系统毕设实战:从环境搭建到二次开发 2026/10/2 2:36:54

Servlet+JSP学生管理系统毕设实战:从环境搭建到二次开发

简介:这是一套面向计算机相关专业毕设学生与Java项目实战练习者的学生管理系统完整资料,基于Servlet、JSP、JDBC与DbUtils搭建后台,前端采用EasyUI、jQuery与Ajax,数据库为MySQL,可作为学生成绩管理或学生信息管理类毕…

阅读更多 →
基于YOLOv5的行为识别实战:从检测框到动作语义的落地指南 2026/10/2 2:36:54

基于YOLOv5的行为识别实战:从检测框到动作语义的落地指南

简介:这份资源面向计算机视觉初学者与行为识别方向的开发者,提供将YOLOv5目标检测模型应用于人体行为分析的完整项目代码与说明文档。包内共6个文件,以2个Python脚本(detect.py、train.py)为核心,配合data.…

阅读更多 →
基于LSTM的股票价格预测与量化策略实战:从数据到回测的完整链路 2026/10/2 2:36:53

基于LSTM的股票价格预测与量化策略实战:从数据到回测的完整链路

简介:这份资源是面向计算机相关专业学生与项目实战学习者的深度学习股票价格预测与量化策略研究完整项目,源自大四毕业设计,经导师指导并获99分评审认可。内容涵盖股票价格预测模型构建与量化策略实现,适合作为毕业设计、课程设计…

阅读更多 →
基于YOLOv5的工地安全帽与危险区域识别系统实战 2026/10/2 2:36:53

基于YOLOv5的工地安全帽与危险区域识别系统实战

简介:这是一套面向计算机视觉初学者与工程开发者的工地安全检测实战源码包,围绕YOLOv5目标检测框架,解决安全帽佩戴识别与禁入危险区域预警两类实际场景问题,适合具备Python基础、希望从零跑通检测项目并迁移到自有数据集的读者。…

阅读更多 →
SpringBoot2+Vue3前后端分离旅游指南系统全栈开发实战 2026/10/2 2:36:46

SpringBoot2+Vue3前后端分离旅游指南系统全栈开发实战

接到“Java Web旅游出行指南系统”这个题目的时候,我第一反应是:这不就是景点列表加个搜索框嘛。等真正动手才发现,在SpringBoot2、Vue3、MyBatis-Plus、MySQL8.0这套组合下,一个看起来普通的管理系统处处都是细节。版本差异、依赖…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉