博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论⭐留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN
未来很长,值得我们全力奔赴更美好的生活!
char a[5];
memset(a,'a',5);
puts(a);
运行结果:
注意事项:
memset函数是按照字节对内存块进行初始化,所以不能用它将int数组出初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。
其实c的实际范围应该在0~255,因为memset函数只能取c的后八位给所输入范围的每个字节。也就是说无论c多大只有后八位二进制是有效的。
memset函数在初始化处理时非常方便,但也有其局限性,比如要注意初始化数值,要注意字节数等等。当然,直接选择用for循环或while循环来进行初始化也是可以的,只不过memset更快捷一些。
基本原型:int memcmp(const void *buf1, const void *buf2, unsigned int count);
主要功能:比较内存区域buf1和buf2的前count个字节。
返回值:
当buf1 当buf1=buf2时,返回值=0 当buf1>buf2时,返回值>0 运行结果:ret=1 说明:该函数是按字节比较的。 例如: s1,s2为字符串时候memcmp(s1,s2,1)就是比较s1和s2的第一个字节的ascII码值; memcmp(s1,s2,n)就是比较s1和s2的前n个字节的ascII码值,如: char *s1="abc"; char *s2="acd"; int r=memcmp(s1,s2,3); 就是比较s1和s2的前3个字节,第一个字节相等,第二个字节比较中大小已经确定,不必继续比较第三字节了所以r=-1. memmove内存拷贝函数,功能是拷贝n个字节到目标地址,目标内存和源地址内存可以重叠。 另外一个内存拷贝函数memcpy,不可以内存重叠。 运行结果: memcpy函数是C语言中的一个用于内存复制的函数,声明在 string.h 中。其原型是: 运行结果: p[0]=h p[1]=e p[2]=l p[3]=l p[4]=o p[5]=, p[6]=n p[7]=i p[8]=, p[9]=h p[10]=a p[11]=o 作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。 使用memcpy函数时,需要注意: 使用memcpy函数时,特别要注意数据长度。如果复制的数据类型是char,那么数据长度就等于元素的个数。而如果数据类型是其他(如int, double, 自定义结构体等),就要特别注意数据长度的值。//a[0] 10 00 00 00
//a[1] 20 00 00 00
int a[2]={10,20};
int b[2]={10,11};
//a[0] 10 00 00 00
//a[1] 11 00 00 00
int ret=-1;
ret=memcmp(a,b,5);//内存比较函数,相同为0,不同为1(字节!!!!)
printf("ret=%d",ret);
3、memmove内存拷贝函数
memmove不是一个安全的函数,因此要注意拷贝时,有越界的产生。一个长度n的数组,使用memmove向后移一位,最多能拷贝n-2个字节。 int a[10]={11,12,13,14,15,16,17,18,19,20};
memmove(a,a+5,12);
puts(a);
4、memcpy内存复制函数
原理:
void test_01(void)//测试字符串,但是memcpy复制还是一个一个字符去复制
{
char str01[]="hello,ni,hao";
char str02[20];
memcpy(str02,str01,12);
print_c(str02,12);
}
函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。
memcpy函数复制的数据长度
好的习惯是,无论拷贝何种数据类型,都用 n * sizeof(type_name)
的写法。