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;
    }
    

    参考文章

    转载注明出处

  • 相关阅读:
    Linux perf命令详解及常用参数解析
    pidstat 命令(Linux 进程使用资源情况采样)
    Katalon Studio入门学习之三种获取元素方式
    用Spring和c3p0工具简单的实现增删改查
    Spring AOP(面向切面示例)
    Spring属性注入、构造方法注入、工厂注入以及注入参数(转)
    PowerDesigner最基础的使用方法入门学习(转)
    Struts文件上传
    struts转换器
    Struts拦截器
  • 原文地址:https://www.cnblogs.com/zhangrxiang/p/8435653.html
Copyright © 2011-2022 走看看