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");
}
//主要用于比较两个数组的元素是否相等
}