34.memset,memcpy,memcmp的用法


memset

memset(void * s, int c, size_t n)

功能将s的内存区域的前n个字节以参数c填入
参数

  • s:需要操作内存s的首地址
  • c:填充的字符,c虽然为参数int,但是必须为unsigned char
  • n:指定需要设置的大小
#include
#include
int main01()
{
	int a;
	memset(&a, 0, sizeof(a));
	printf("a = %d\n", a);
	
	//中间参数虽然是整数,但是通过字符处理 
	memset(&a, 97, sizeof(a));
	printf("a1 = %c\n", a);
	
	int b[10];
	memset(b, 0, sizeof(b));
	
	
	return 0;
}	

int main()
{
	int b[10] = {0};
	int i = 0;
	int n = sizeof(b) / sizeof(b[0]);
	for(i = 0; i < n; i++)
	{
		b[i] = 0;
	}
	memset(b, 0, sizeof(b));
	
	char str[10];
	memset(str, 'a', sizeof(str));
	for(i = 0; i < 10; i ++)
	{
		printf("%c", str[i]);
	}
	printf("\n");
	return 0;
}

memcpy

#include
#include
int main()
{
	char p[] = "hello\0mike";//以字符串初始化,自动在末尾隐藏一个结束符'\0'
	char buf[100];
	strcpy(buf, p, sizeof(p));
	printf("buf = %s\n", buf);
	printf("buf2 = %s\n", buf + strlen("hello") + 1);//buf2为空
	
	memset(buf, 0, sizeof(buf));
	memcpy(buf, p, sizeof(p)); //第三个参数是表示拷贝内存的总大小 
	printf("buf3 = %s\n", buf);
	printf("buf4 = %s\n", buf + strlen("hello") + 1);
	
	memcpy(&a[2], a, 5 * sizeof(int));//内存重叠,最好使用memmove 
 
} 

memcmp

#include
#inlcude
int main()
{
	int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int flag = memcmp(a, b, 10 * sizeof(int));
	if(flag < 0)
	{
		printf("a < b\n";)
	}
	else if(flag > 0)
	{
		printf("a > b\n");
	}
	else
	{
		printf("a == b\n");
	}
	//主要用于比较两个数组的元素是否相等 
}