memset memcpy memmove和memcmp函数

memset memcpy memmove和memcmp函数属于内存操作函数,下面对这几个函数的用法进行简单说明

  • memset函数:
    void* mamset(void*s,int c,size_t n);
    功能:将s指向的空间前n个字节初始化为c,但一般c的值为0
    例子:
    int main()
    {
    int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
    memset(a, 0, 40);
    for (int i = 0; i < 10; i++)
    {
    printf("%d\n", a[i]);
    }
    system(“pause”);
    return 0;
    }

在这里插入图片描述
但是当我们选择使用1进行初始化时,结果是:

原因如下:memset函数是对内存最小单位进行初始化,而char类型占用8字节,是基本单位,即初始化最小单位就是一个字节,即00~ff(二进制表示),那么,当选择1进行初始化时,就变成这样:01010101(16进制,改为十进制数为16843009),因此显示结果如图
PS:使用此函数一般初始化为0(别的值和预期的不同),注意最后一个参数单位是字节。

  • memcpy函数
    void *memcpy(void dest,void src,size_t n)
    作用:拷贝src中n个字节到dest中,与strcpy函数相近
    例子:

    int main()
    {
    int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
    int b[10];
    memcpy(b, a,40);
    for (int i = 0; i < 10; i++)
    {
    printf("%d\n", b[i]);
    }
    system(“pause”);
    return 0;
    }
    与函数strcpy函数的区别:

  • 参数不同,一个是char* 一个是void*

  • strcpy只能拷贝字符串,memcpy范围较广

  • strcpy以遇到‘\0’为结尾,memcpy以参数个数结尾

  • memmove函数
    用法和memcpy一样,但当dest参数和src参数有地址重叠时,此函数更加安全,但效率低一些

  • memcmp函数
    int memcmp(void *s1,void *s2,size_t n)
    作用:s1和s2进行比较,相等返回0,小于返回值小于0,大于返回值大于0

    int main()
    {
    int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
    int b[10] = { 1,2,3,4,5};
    int result=memcmp(b, a,4);//比较第一个数
    printf("%d\n", result);
    system(“pause”);
    return 0;
    }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36696486/article/details/86561052