zoukankan      html  css  js  c++  java
  • 几个内存操作函数使用

    几个内存操作函数使用

    c/c++开发


    memset()函数使用

    包含在头文件:include <string.h>
    函数原型:void *memset(void *s,int c,size_t n) ;
    功能:将s的内存区域的前n个字节以参数c填入
    参数:

    • s:需要操作的内存s的首地址
    • c:填充的字符,c虽然参数为int,但是必须是unsigned char ,范围为0~255
    • n:指定需要设置的大小

    返回值:s的首地址

    实例:我们常用此函数来给数组清零

    int b[10] = {0};
    //经过一系列改变b中数据操作后
    //比较笨的办法
    int n = sizeof(b)/sizeof(b[0]) ;
    for(int i = 0; i<n ;i++){
        b[i] = 0 ;
    }
    //使用memset一步到位的办法
    memset(b,0,sieof(b)) ;
    

    //或者对于字符数组来说
    char str[10] ;
    memset(str,'a',sizeof(str)) ;

    memcopy()函数使用

    包含在头文件:include <string.h>

    函数原型:void *memcpy(void *str1,const void *str2,size_t n) ;

    功能:将一个区域的值复制到另一个区域。

    参数:

    • str1:指向用于存储复制内容的目标数组,类型强制转换为void *指针。
    • str2:指向要复制的数据源,类型强制转换为void *指针。
    • n:要被复制的字节数

    返回值:返回指向目标存储区的str1指针。

    实例:

    int main(){   
    const char src[50] = "hello world !";
    char dest[50];   
    memcpy(dest, src, strlen(src)+1); 
    printf("dest = %s
    ", dest); 
    return 0 ;
    } 
    

    memmove()函数使用

    包含在头文件:include <string.h>
    函数原型:void *memmove(void *str1,const void *str2,size_t n) ;
    功能:将一个区域的值复制到另一个区域。如果目标区域和源区域有重叠的话,memmove()能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和memcpy()函数功能相同。
    参数:

    • str1:指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
    • str2:指向要复制的数据源,类型强制转换为 void* 指针。
    • n:要被复制的字节数。

    返回值:返回一个指向目标存储区 str1 的指针。

    实例:

    int main(){
    const char dest[] = "oldstring";
    const char src[]  = "newstring";
    printf("Before memmove dest = %s, src = %s
    ", dest, src);
    memmove(dest, src, 9);
    printf("After memmove dest = %s, src = %s
    ", dest, src);
    return(0);
    }
    

    输出结果:
    Before memmove dest = oldstring, src = newstring
    After memmove dest = newstring, src = newstring

    memcmp()函数使用

    包含在头文件:include <string.h>
    函数原型:int memcmp(const void *str1, const void *str2, size_t n);
    功能:把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
    参数:

    • str1:指向内存块的指针。
    • str2:指向内存块的指针。
    • n:要被比较的字节数。

    返回值:

    • 如果返回值 < 0,则表示 str1 小于 str2
    • 如果返回值 > 0,则表示 str2 小于 str1
    • 如果返回值 = 0,则表示 str1 等于 str2

    实例:

    int main (){
       char str1[15];
       char str2[15];
       int ret;
       memcpy(str1, "abcdef", 6);
       memcpy(str2, "ABCDEF", 6);
       ret = memcmp(str1, str2, 5);
       if(ret > 0)
       {
          printf("str2 小于 str1");
       }
       else if(ret < 0) 
       {
          printf("str1 小于 str2");
       }
       else 
       {
          printf("str1 等于 str2");
       }
       return(0);
    }
    

    输出结果:str2 小于 str1

  • 相关阅读:
    AWTK-MVVM 在 STM32H743 上的移植笔记
    windows 中文 unicode 编码显示
    SpringBoot项目jar包运行
    Activiti中的互斥网关、并行网关、兼容网关、事件网关
    【LeetCode】739.每日温度(5种方法,详细图解)
    【LeetCode】20.有效的括号(使用栈,动图详解)
    你知道权限管理的RBAC模型吗?
    关闭Win10自动更新
    iOS 中如何判断当前是2G/3G/4G/5G/WiFi
    GCD API 记录 (三)
  • 原文地址:https://www.cnblogs.com/warm-home/p/12844331.html
Copyright © 2011-2022 走看看