memcmp使用
2018-04-11 本文已影响108人
龙马君
函数原型
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占用的字节数