//内存函数
#include <stdio.h>
#include <memory.h>
#include <strings.h>
void main2(){ //memset赋值函数
char str[45] = "hello luoxu hello c";
memset(str,'A',6); //第一个参数内存首地址,第二个参数要赋值的值,第三个参数从首地址前进多少个字节
printf("%s\n",str); //AAAAA luoxu hello c
memset(str,'0',strlen(str)); //全部置为0
printf("%s,%d\n",str,strlen(str));//0000000000000000000,19
memset(str,'\0',strlen(str)); //清空字符串
printf("%s,%d\n",str,strlen(str));//,0
}
void main3(){ //memcpy拷贝字符串
char str1[30] ="China is great";
char str2[30] ="hello c";
printf("%s\n",str1); //China is great
memcpy(str1,str2,5); //从str2中取5个字符替换掉str1中首地址开始的内容 5表示字节数
printf("%s\n",str1); //hello is great
}
void main4(){ //memcpy拷贝数组
int a[]={1,3,5,7,9};
int b[]={2,4,6,8,10};
memcpy(a,b,8); //从b的首地址开始取出8个字节的二进制数,赋值给从a首地址开始8个字节的二进制数,也就是替换a中的前两个元素
//memcpy按照内存字节来拷贝,不管是什么类型,都是拷贝二进制,所以四个字节的整数也可以按照字节来拷贝
for (int i = 0; i < 5; ++i) {
printf("%d,",a[i]); //2,4,5,7,9,
}
}
void main5(){ //memccpy拷贝字符串,某一字符结束
char str1[30] ="China is great";
char str2[30] ="hello c";
printf("%s\n",str1); //China is great
//memccpy(str1,str2,'0',7); //从str2中取5个字符(遇到'0'就结束替换)替换掉str1中首地址开始的内容 7表示字节数,此时等价于memcpy()
memccpy(str1,str2,'l',7); //从str2中截取从首地址开始到'l'的字符串,将其与str1中首地址开始的字符串替换
//作用:某些时候可以利用此特性把某字符设置为结束符
printf("%s\n",str1); //helna is great
}
void main6(){ //memchr 查找在字符串中某一字符的地址
char str[30] ="China is great";
char ch='i';
char *p = memchr(str,ch,30);
//从地址str开始检索,前进30个字节,存在返回其地址,不存在返回为NULL
if(p ==NULL) printf("not found");
else printf("found");
}
void main(){ //memicmp 忽略大小写比较字符串是否相等 ignore
char *buf1 ="ABCD123";
char *buf2 ="abcd456";
int res = memicmp(buf1,buf2,4);
//比较buf1和buf2前面四个字节是否相等,忽略大小写,相等返回其0,不等返回非0
if(res ==0 ) printf("前4个字符忽略大小写相等");
else printf("前4个字符忽略大小写相等");
}