C语言 内存函数


正文开始

本篇文章所讲函数均需引用头文件string.h>>>详情戳我

1. memcpy - 复制

memcpy 函数用于将一个缓冲区复制到另一个

void* memcpy( void *dest, const void *src, size_t count );

在这里插入图片描述
memcpy 用法:

  • memcpy 函数从 src 的位置开始向后复制 count 个字节的数据到 dest 指向的内存位置
  • 函数遇到‘\0’时并不会停下来
  • 若 src 和 dest 内存有重叠,复制的结果为未定义
  • dest 所指向空间需足够大,以保证能放下count 个字节的数据

例如:

#include <stdio.h>
#include <string.h>

int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[10] = { 0 };
	memcpy(arr2, arr1, 16);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

2. memmove - 可重叠复制

memove 函数也可将一个缓冲区复制到另一个,但它不同于 memcpy 函数的是:它所处理的源内存块和目标内存块是可以重叠的

void* memmove( void* dest, const void* src, size_t count );

在这里插入图片描述

memove 用法:

  • 源空间与目标空间出现重叠时,可以使用 memove 函数,其他与 memcpy 函数类似,这里不再赘述

例如:

#include <stdio.h>
#include <string.h>

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	memmove(arr,arr + 5, 16);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果:
在这里插入图片描述

3. memset - 填充内存

meeset 函数用来将内存中的值以字节为单位设置成想要的內容

void *memset( void *dest, int ch, size_t count );

在这里插入图片描述
memset 用法:

  • memset 函数将(unsigned char)ch复制到指针 dest 所指向的地址的后 count 个字节中
  • dest 所指向的空间需要足够大,以保证能存放下 count 个字节的数据
  • dest 若为空指针,则行为未定义
  • 函数返回值为 dest 的副本

例如:

#include <stdio.h>
#include <string.h>

int main()
{
	char str[] = "I am wwangxu.";
	printf("%s\n", str);
	memset(str, '*', 5);
	printf("%s\n", str);
	return 0;
}

在这里插入图片描述

4. memcmp - 比较内存

memcmp 函数以字节为单位,比较两块内存

int memcmp( const void* lhs, const void* rhs, size_t count );

在这里插入图片描述
memcmp 用法:

  • 比较 lhs 和 rhs 所指向的对象的开头 count 个字节,以字节为单位
  • memcmp 函数会从两指针起始位置开始,逐字节比较每个位置上的內容,比较过程中若比较出了某字节的大小,则停止比较,按照该字节內容的大小来决定哪个指针指向的內容更大,若 lhs 比 rhs 大,则返回值为正值;若相等,或 count 为零则返回值为零;若小于,则返回值为负值

例如:

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[] = "I am wwangxu";
	char str2[] = "I am not wwangxu";
	printf("str1和str2比较4个字节的结果:%d\n", memcmp(str1, str2, 4));
	printf("str1和str2比较6个字节的结果:%d\n", memcmp(str1, str2, 6));
	printf("str2和str1比较6个字节的结果:%d\n", memcmp(str2, str1, 6));
	return 0;
}

在这里插入图片描述


相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 22:20:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 22:20:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 22:20:05       87 阅读
  4. Python语言-面向对象

    2024-04-24 22:20:05       96 阅读

热门阅读

  1. cuda总结

    2024-04-24 22:20:05       33 阅读
  2. GitLab 查看版本信息

    2024-04-24 22:20:05       36 阅读
  3. 002 fanout

    2024-04-24 22:20:05       35 阅读
  4. jh7110 visionfive2 linux uboot debian

    2024-04-24 22:20:05       37 阅读
  5. k8s的网络组件有哪些,他们的作用分别是什么

    2024-04-24 22:20:05       34 阅读
  6. Python语言第五章之字符串

    2024-04-24 22:20:05       36 阅读
  7. 5359: 【图论】有向图连接边数(图的遍历前置)

    2024-04-24 22:20:05       29 阅读
  8. 多批道处理算法

    2024-04-24 22:20:05       29 阅读