2 hzyuu hzyuu 于 2016.03.17 15:59 提问

memcmp参数比较之疑惑

memcmp内存比较,当第一个参数长度小于第三个参数指定的长度时,是否有必要在调用之前加长度判断?

3个回答

cxsmarkchan
cxsmarkchan   2016.03.17 16:28
已采纳

需要的。

int memcmp(const void *buf1, const void *buf2, unsigned int count);

memcmp的前两个参数是起点,第三个参数是长度。memcmp内部并不会检查你的内存长度,它会按照你给定的长度进行扫描。所以你必须保证count的长度不超过buf1和buf2的长度。或者保证buf1或buf2越界前,memcmp能够返回。

oyljerry
oyljerry   Ds   Rxr 2016.03.17 16:52

长度不对,就会导致越界,也就是buffer overflow,这个是你调用的时候需要对参数做安全检查

yanggq1988
yanggq1988   2016.03.17 17:29

会导致结果不对,最后指针的内容不能保证。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
memcmp的用法
1函数原型编辑 int memcmp(const void *buf1, const void *buf2, unsigned int count); 2功能编辑 比较内存区域buf1和buf2的前count个字节。 3所需头文件编辑 #include 或#include 4返回值编辑 当buf1 当buf1=buf2时,返回
MemCmp
memcmp(const void *src1, const void *src2, unsigned int len) 函数比较两块存储空间的内容一致性。 src1 --> 第一块内存起始地址 src2 --》第二块内存起始地址 len --》需要比较的内存的长度 如
memcmp之优化
原文地址::http://blog.chinaunix.net/uid-25627207-id-3556923.html 前段时间在公司移植一个工具的时候,历经千辛万难,终于把工具移植过去了。因为工具涉及到写Nand Flash,所以需要将写入的数据读出来,确认是否数据被正确的写入到flash上。结果,发现两者的效率确实有相当大的差异。于是,就着手开始找问题出在哪里。由于是和na
memcmp比较字符串
#include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char **argv) { printf("%d, a == aa with compare 1 bytes.\n", memcmp("a", "aa", 1)); printf("%d, a <
memcmp
所需头文件: #include 或#include 函数原型: int memcmp(const void *buf1, const void *buf2, unsigned int count); 功能: 比较 buf1和buf2的前count个字符的Ansi码的大小; 当buf1当buf1=buf2时,返回值=0当buf1>buf2时,返回值>0说明: 该函数是按字节比较的。例如
memcmp的性能分析
最近在优化软件运行速度,翻查C++代码的时候,发现了这么一处函数。功能很简单,就是比较内存值是否相同。 函数如下: int cfunc_memcmp(char* src, char* dest, int n) { while (n--) if (*src++ != *dest++) return 1; return 0; } 看起...
memcmp源码
// //  main.cpp //  AUTO_PRO // //  Created by yanzhengqing on 12-12-11. //  Copyright (c) 2012年 yanzhengqing. All rights reserved. // #include #include using namesp
memcmp返回值
原型:int memcmp(const void *buf1, const void *buf2, unsigned int count);   用法:#include 或#include   功能:比较内存区域buf1和buf2的前count个字节。   说明:   当buf1   当buf1=buf2时,返回值=0   当buf1>b
memcmp,memicmp函数
函数原型:extern int memcmp(void *str1, void *str2, unsigned int n)参数说明:str1和str2为指定作比较的字符串,比较两个字符串的前n个字节。        所在库名:#include   函数功能:比较字符串str1和str2在内存区域中的的前n个字节是否相同。  返回说明:当str1str12时,返回值>0。其它说明:暂时无。
用memcmp()比较结构体
http://www.cnblogs.com/cxz2009/archive/2010/11/11/1875125.html 可以通过memcmp()来比较2个相同的结构体变量,但这2个变量必须在赋值前进行清零初始化(否则结果不准确) ,或者2者是通过直接对等赋值而来。 另外,结构体的命名对memcmp()没有影响(只要内部结构完全一样)。 #include #inclu