
博主简介:byte轻骑兵,现就职于国内知名科技企业,专注于嵌入式系统研发。深耕 Android、Linux、RTOS、通信协议、AIoT、物联网及 C/C++ 等领域,乐于技术交流与分享。欢迎技术交流。 主页地址:byte轻骑兵-CSDN博客 微信公众号:「嵌入式硬核研究所」 邮箱:byteqqb@163.com 声明:本文为「byte轻骑兵」原创文章,未经授权禁止任何形式转载。商业合作请联系作者授权。
在C语言中,内存操作是编程中非常基础且重要的一部分。C标准库提供了一系列用于内存操作的函数,这些函数允许程序员直接对内存进行读写、复制、分配和释放等操作。
1.1.malloc(size_t size)1.2. calloc(size_t num, size_t size)num个size大小的元素,并将所有位初始化为0。malloc,calloc会进行内存初始化,因此在某些情况下可能会稍慢。1.3. realloc(void *ptr, size_t size)malloc、calloc或realloc分配的内存块的大小。ptr是NULL,则realloc的行为与malloc相同。size是0,并且ptr不是NULL,则释放ptr指向的内存块,并返回NULL。1.4. free(void *ptr)malloc、calloc或realloc分配的内存块。ptr是NULL,则不执行任何操作。功能:比较两个内存块的内容。
原型:
int memcmp(const void *s1, const void *s2, size_t n);参数:
s1:指向要比较的第一个内存块的指针。s2:指向要比较的第二个内存块的指针。n:要比较的字节数。返回值:
s1小于s2,则返回负值。s1等于s2,则返回0。s1大于s2,则返回正值。其详细讲解和介绍见内存内容操作之一:memcmp函数详解-CSDN博客
功能:从源内存地址复制n个字节的数据到目标内存地址。
原型:
void *memcpy(void *dest, const void *src, size_t n);参数:
dest:目标内存地址,即要将数据复制到的位置。src:源内存地址,即要复制数据的起始位置。n:要复制的字节数。返回值:返回目标内存地址dest的指针。
注意:源内存块和目标内存块不能重叠。
其详细讲解和介绍见内存内容操作之二:memcpy函数详解-CSDN博客
功能:与memcpy()类似,但更安全,可以处理源内存块和目标内存块重叠的情况。
原型:
void *memmove(void *dest, const void *src, size_t n);参数:与memcpy()相同。
返回值:返回目标内存地址dest的指针。
注意:通过智能地调整复制方向(向前或向后),确保在内存块重叠时也能正确复制数据。
其详细讲解和介绍见:内存内容操作之三:memmove函数详解-CSDN博客
功能:将目标内存块的前n个字节设置为指定的值。
原型:
void *memset(void *s, int c, size_t n);参数:
s:指向要设置的内存块的指针。c:要设置的值(通常是一个字节的值,会被转换为unsigned char)。n:要设置的字节数。返回值:返回目标内存地址s的指针。
用途:常用于初始化内存块、清除内存等操作。
其详细讲解和介绍见:内存内容操作之四:memset函数详解-CSDN博客
功能:在内存块中搜索首次出现的指定字符。
原型:
void *memchr(const void *s, int c, size_t n);参数:
s:指向要被搜索的内存块的指针。c:要搜索的字符(实际传递的是其ASCII值)。n:要搜索的字节数。返回值:如果找到指定字符,则返回指向该字符的指针;否则返回NULL。
其详细介绍和讲解见:内存内容操作之五:memchr 函数详解-CSDN博客
由于C语言本身不直接支持字符串类型,字符串通常是通过字符数组的形式来存储和处理的,并以空字符('\0')作为结束标志。以下是一些常用的C语言中涉及内存的字符串操作函数:
<string.h>头文件中。字符串与数值之间的转换主要通过标准库函数实现。这些函数定义在<stdlib.h>(对于整数和浮点数转换)和<stdio.h>(对于字符串的格式化输入输出,间接用于转换)中。下面是一些常用的字符串与数值转换函数。
①字符串转整数
int)。这个函数没有错误检查,如果转换失败,它会返回0。long)。与atoi()类似,也没有错误检查。long),并提供了错误检查机制。intmax_t),提供了更广泛的整数范围和错误检查。②字符串转浮点数
double)。这个函数没有错误检查,如果转换失败,它会返回0.0。double),并提供了错误检查机制。float),并提供了错误检查机制。long double),并提供了错误检查机制。③整数转字符串
sprintf()主要用于格式化输出到字符串,但它也可以用来将整数转换为字符串。通过指定格式说明符(如%d、%ld、%lld等),可以将整数转换为字符串。sprintf()类似,但允许你指定目标字符串的大小,从而避免缓冲区溢出。④浮点数转字符串
%f、%e、%g等)。⑤注意
strtol()、strtod()等函数时,应检查函数的返回值以及可能设置的errno值(如果可用),以检测转换错误。atoi()、atof())在转换失败时可能不会给出明确的错误指示,因此在使用时需要格外小心。sprintf())实现,这些函数提供了丰富的格式化选项。<string.h>和<stdlib.h>。这些函数是C语言标准库中处理内存时最常用的函数。在使用这些函数时,务必注意内存泄漏、缓冲区溢出等安全问题。