zoukankan      html  css  js  c++  java
  • C 标准库

    memcmp

    • Compare two blocks of memory.
    • Compares the first num bytes of the block of memory pointed by ptr1 to the first num bytes pointed by ptr2, returning zero if they all match or a value different from zero representing which is greater if they do not.
      Notice that, unlike strcmp, the function does not stop comparing after finding a null character.
    • 把存储区 lhs 和存储区 的前 count 个字节进行比较。
    • 比较 lhs 和 rhs 所指向对象的首 count 个字节。比较按字典序进行。
    • 结果的符号是在被比较对象中相异的首对字节的值(都转译成 unsigned char )的差。
    • 若在 lhs 和 rhs 所指向的任一对象结尾后出现访问,则行为未定义。若 lhs 或 rhs 为空指针则行为未定义。
    int memcmp( const void* lhs, const void* rhs, size_t count );
    

    Parameters

    lhs

    • Pointer to block of memory.
    • 指向内存块的指针。

    rhs

    • Pointer to block of memory.
    • 指向内存块的指针。

    count

    • Number of bytes to compare.
    • 要被比较的字节数。

    Return Value

    • Returns an integral value indicating the relationship between the content of the memory blocks:

      • < 0 the first byte that does not match in both memory blocks has a lower value in lhs than in rhs (if evaluated as unsigned char values)
      • 如果返回值 < 0,则表示 lhs 小于 rhs
      • 0 the contents of both memory blocks are equal
      • 如果返回值 > 0,则表示 lhs 小于 rhs
      • > 0 the first byte that does not match in both memory blocks has a greater value in lhs than in rhs (if evaluated as unsigned char values)
      • 如果返回值 = 0,则表示 lhs 等于 rhs

    Example

    //
    // Created by zhangrongxiang on 2018/2/8 16:57
    // File memcmp
    //
    
    #include <stdio.h>
    #include <string.h>
    
    //C 库函数 int memcmp(const void *str1, const void *str2, size_t n)) 把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
    //比较按字典序进行。
    typedef struct {
        char *name;
    } Stu;
    
    int main() {
        char *str = "abc";
        char *str2 = "abC";
        int cmp = memcmp(str, str2, strlen(str) > strlen(str2) ? strlen(str) : strlen(str2));
        printf("%d
    ", cmp); // windows mingw -> 1  linux gcc 32
    
        int i = 0;
        int i2 = 10;
        cmp = memcmp(&i, &i2, sizeof(int));
        printf("%d
    ", cmp);//windows mingw -> -1  linux gcc -10
        printf("%d
    ", (int) sizeof(short));//2
    
        Stu stu = {.name = "zing"};
        Stu stu2 = {.name = "zing"};
        Stu stu3 = {.name = "Zing"};
        Stu stu4 = {.name = "aing"};
    
        /***********************************************/
        printf("%d
    ", (int) sizeof(Stu)); //8
        printf("%d
    ", (int) sizeof(stu.name)); //8
        printf("%d
    ", (int) strlen(stu.name)); //4
        printf("%d
    ", (int) sizeof(char *)); //8
        printf("%d
    ", (int) sizeof(int *)); //8
        printf("%d
    ", (int) sizeof(long *)); //8
        /***********************************************/
    
        cmp = memcmp(&stu, &stu2, sizeof(Stu));
        printf("struct %d 
    ", cmp);//0
        cmp = memcmp(&stu, &stu3, sizeof(Stu));
        //printf("struct %d 
    ", cmp);//-5 具有不确定性 --> 内存对齐知识
        cmp = memcmp(stu.name, stu3.name, sizeof(Stu));
        printf("struct %d 
    ", cmp); // windows mingw -> -1  linux gcc 32
        cmp = memcmp(stu.name, stu4.name, sizeof(Stu));
        printf("struct %d 
    ", cmp); // windows mingw -> -1  linux gcc 25
    
        cmp = memcmp(&"abC", &"abc", sizeof(char *));
        printf("%d
    ", cmp);//-32
        printf("a -> %d;A -> %d 
    ", 'a', 'A');//a -> 97;A -> 65
        printf("z -> %d;a -> %d 
    ", 'z', 'a');//z -> 122;a -> 97
        return 0;
    }
    

    参考文章

    转载注明出处

  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/zhangrxiang/p/8435653.html
Copyright © 2011-2022 走看看