016-C语言内存函数

C语言内存函数

文章目录

  • C语言内存函数
    • [1. memcpy](#1. memcpy)
    • [2. memmove](#2. memmove)
    • [3. memset](#3. memset)
    • [4. memcmp](#4. memcmp)

注意: 使用这些函数需要包含 string.h头文件。

1. memcpy

c 复制代码
void * memcpy ( void * destination, const void * source, size_t num );
  • source指向的位置开始,向后复制num个字节的内容到destination中。
  • 复制过程中,不在乎内容是什么,无论是什么内容都是照搬。
  • destinationsource指向的空间中有任何的重叠部分,那么它们复制的结果都是未定义的。
  • 需要注意的是,在拷贝字符串时,如果拷贝的内容最后一个位置不是\0,最好在拷贝结束后加上\0,否则后期可能造成越界访问。
c 复制代码
#include <stdio.h>
#include <string.h>

int main()
{
	char* s1 = "hello memcpy";
	char s2[50];
	memcpy(s2, s1, ((strlen(s1) + 1) * sizeof(s1[0])));
	printf("%s\n", s2);

	return 0;
}

2. memmove

c 复制代码
void * memmove ( void * destination, const void * source, size_t num );
  • memcpy不同的是memmovedestinationsource指向的部分是可以重叠的。
c 复制代码
#include <stdio.h>
#include <string.h>

int main()
{
	char s1[100] = "hello memmove 123456789";
	memcpy(s1 + 14, s1, 13 * sizeof(s1[0]));
	printf("%s\n", s1);

	return 0;
}

3. memset

c 复制代码
void * memset ( void * ptr, int value, size_t num );
  • ptr指向的内存的num个字节的内存全部设置成value
c 复制代码
#include <stdio.h>
#include <string.h>

int main()
{
	char s1[100] = "hello memset";
	memset(s1, 'C', 3);
	printf("%s\n", s1);

	return 0;
}

4. memcmp

c 复制代码
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
  • 比较ptr1ptr2指向的位置开始,向后的num个字节的内容。
  • 如果ptr1指向的内容小于ptr2指向的内容,则返回值<0
  • 如果ptr1指向的内容等于ptr2指向的内容,则返回值==0
  • 如果ptr1指向的内容大于ptr2指向的内容,则返回值>0
c 复制代码
#include <stdio.h>
#include <string.h>

int main()
{
	char s1[] = "123456789";
	char s2[] = "234567890";
	printf("%d\n", memcmp(s1, s2, 5 * sizeof(char)));

	return 0;
}
相关推荐
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
xiaobobo333017 小时前
C语言中宏定义宏名和宏值之间的关系
c语言·宏定义·语义型
a44931536220 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
a4493153621 天前
iPhone 充电故障的全链路诊断——从 Lightning/USB-C 接口到 Tristar 充电 IC
c语言·macos·ios·电脑·硬件架构·iphone
qq_448011161 天前
C语言中的getchar()
c语言·开发语言
天空'之城1 天前
C 语言工业级通用组件手写 15:累加和校验
c语言·嵌入式开发·工业级组件·累加和校验
碎光拾影2 天前
i.MX6ULL时钟系统配置指南
c语言·arm开发·嵌入式硬件
GeekArch2 天前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
wuyk5552 天前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
无相求码2 天前
C程序的内存到底怎么分的?栈、堆、全局区一张图讲清楚
c语言