前提
最近在使用C语言在开发项目时,要对内存进行操作。刚开始写的时候有一点迷糊,看了一些东西后才发现为什么说指针是C语言的灵魂,因为它可以对内存直接进行操作,多么帅的事情,真的是太帅了。
malloc
声明在头文件<stdlib.h>中。
函数定义:
void *malloc(size_t size)
函数说明:分配size个字节的未初始化内存。如果分配成功,则返回一个指针,该指针适合任何具有基本对齐方式的对象类型(可以强制类型转换为任何具有基本对齐方式的对象类型)。如果分配失败,则返回null指针。
一般使用:int* ptr = (int *)malloc(100 * sizeof(int)),申请100个int的空间。
memcpy
函数定义:

从src处copycount个字节到dest处,输入的指针会被强转为void *,如果是memcpy_s的话,destsz指dest处可用的字节大小。memcpy_s是从C11才使用的,它要比memcpy更安全,成功返回0,失败则返回非0。它可以处理以下集中情况:
dest或者src是一个空指针destsz或者count比RSIZE_MAX大count比destsz大(发生溢出)src和dest的内存重叠
一般使用:memcpy(dst, src, 3*sizeof(int))
memccpy

将内存区域从源地址复制到目标地址,直到遇到指定的字符c或者复制了指定的字节数count时停止
memmove
函数定义:

和memcpy类似,但能正确处理src内存区域和dest内存区域重叠的情况。如果发生重叠:先将数据copy到一个临时空间
一个例子如下:
char str[] = "1234567890";
puts(str);
memmove(str+4, str+3, 3); // copy from [4,5,6] to [5,6,7]
memset

将一块内存区域的每个字节都设置为指定的值。ch为要设置的值,以整数形式给出,但通常使用unsigned char类型的值。这个值会被强制转换为unsigned char类型,然后被复制到内存区域中的每个字节。count为要设置的字节数。
memcmp

用于比较两块内存区域的内容, count为要比比较的字节数。如果相等返回0,lhs>rhs返回正数,lhs<rhs返回负数。谁大谁小是按照字典顺序比较的。
memchr

找到(unsigned char)ch在制定内存中第一次出现的位置。如果找到了,则返回指向该字符的指针,如果未找到,则返回一个空指针。
一个用例:
char str[] = "abcdefg";
char *result;
// 在str中搜索字符 'd'
result = (char *)memchr(str, 'd', strlen(str));
参考链接
- https://devdocs.io/c/string/byte/memccpy



















