memcmp使用

函数原型
int memcmp(const void *buf1, const void *buf2, unsigned int count);
功能:比较内存区域buf1和buf2的前count个 字节

返回值
当buf1<buf2时,返回值小于0
当buf1==buf2时,返回值=0
当buf1>buf2时,返回值大于0

错误使用:

    wstring ext = L"deb";
    LPCWSTR v = L"def";
    LPCWSTR v1 = ext.c_str();
    int l = ext.length();
    int r = memcmp(v, v1, ext.length());  // r == 0相等

为什么呢?
因为:
wstring / LPCWSTR 表示的是宽字符,因此ext.length()得到的是字符数,
ext 有3个宽字符,占6个字节。
ext和v的前面2个字符是相等的,也就是前面4个字节是相等的。
而memcmp(v, v1, ext.length()); 比对的是前面3个字节,自然也就相等了。
通过内存查看:


v内存

v1内存

结论:v和v1每个字符确实占用2个字节。

正确使用:

wstring ext = L"deb";
LPCWSTR v = L"def";
LPCWSTR v1 = ext.c_str();
int l = ext.size();
int r = memcmp(v, v1, ext.length() * sizeof(wchar_t)); // 这里要乘以wchar_t占用的字节数

推荐阅读更多精彩内容