C语言之内存操作:memset & memcpy

时间:2021-02-12 01:30:30

        C语言当中,在string.h头文件中还定义了与内存相关的操作,这里讲一下,memset和memcpy函数。

1. memset

        memset的函数原型为:
        void *memset(void *Dst, int Val, size_t Size);
        memset函数将Dst所在的内存区域进行重置为Val值,重置的范围由Size决定,表示Dst所在的内存区域的Size字节被置为Val值。memset一般用作一段内存空间或数组的初始化。
        例:
        #include<stdio.h>
        #include<stdlib.h>
        #include<string.h>
        int main()
        {
             int *p = (int *)malloc(10 * sizeof(int));

             memset(p, 0, 10*sizeof(int));
             
             free(p);
             return 0;
        }
        需要注意的是, memset对int型内存空间重置时,Val值取0或-1得到的结果是正确的,对于其他值都是不对的
        对于char型的空间重置的话,Val可以是数值,也可以是字符:
        char str[10];
        memset(str, 1, 10*sizeof(char));  // str字符数组,重置为数值1(ASCII码值为1)
        memset(str, '1', 10*sizeof(char)); //str字符数组,重置为字符'1'

2. memcpy

        memcpy的函数原型为:
        void *memcpy(void *Dst, void *Src, size_t Size);
        memcpy函数将Src所在区域的Size字节的数据复制到Dst所在的内存空间。需要注意的是,memcpy与strcpy相比,遇到'\0'不会停止复制,而是复制完Size字节。
        例:
        #include<stdio.h>
        #include<stdlib.h>
        #include<string.h>
        int main()
        {
            char *p = (char *)malloc(10 * sizeof(char));
            char a[10];
            
            memset(p, 1, 10*sizeof(char));
            memcpy(a, p, 10*sizeof(char));

            free(p);
            return 0;
        }