美文网首页
memcmp使用

memcmp使用

作者: 龙马君 | 来源:发表于2018-04-11 17:17 被阅读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占用的字节数
    

    相关文章

      网友评论

          本文标题:memcmp使用

          本文链接:https://www.haomeiwen.com/subject/ogrzhftx.html