函數(shù)原型
int memcmp(const void *buf1, const void *buf2, unsigned int count);
功能:比較內(nèi)存區(qū)域buf1和buf2的前count個(gè) 字節(jié)
返回值
當(dāng)buf1<buf2時(shí),返回值小于0
當(dāng)buf1==buf2時(shí),返回值=0
當(dāng)buf1>buf2時(shí)坟漱,返回值大于0
錯(cuò)誤使用:
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相等
為什么呢呀邢?
因?yàn)椋?br>
wstring / LPCWSTR 表示的是寬字符羹令,因此ext.length()得到的是字符數(shù)闷尿,
ext 有3個(gè)寬字符线椰,占6個(gè)字節(jié)岗钩。
ext和v的前面2個(gè)字符是相等的纽窟,也就是前面4個(gè)字節(jié)是相等的。
而memcmp(v, v1, ext.length()); 比對(duì)的是前面3個(gè)字節(jié)兼吓,自然也就相等了臂港。
通過(guò)內(nèi)存查看:
v內(nèi)存
v1內(nèi)存
結(jié)論:v和v1每個(gè)字符確實(shí)占用2個(gè)字節(jié)。
正確使用:
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占用的字節(jié)數(shù)