加载中......
输入验证码,即可复制
微信扫码下载好向圈APP, 登陆后即可进入消息页面查看验证码
只需要3秒时间
字符串内存操作:

主要有memcpymemmovememcmpmemchrmemset几个函数
原型:
void memcpy(void dst, void const src, size_t length);void memmove(void dst, void const src, size_t length);void memcmp(void const s1, void const s2, size_t length);void memchr(void s1, void const s2, size_t length);void memset(void dst, int ch, size_t length);

memcpy

原型:void memcpy(void dst, void const src, size_t length);
说明:从src的起始位置赋值length个字节到dst的内存起始位置,可以复制任何类型。如果src和dst出现重叠,其结果是未知的。
用法:
char dst[20];char src[20] = "hello";memcpy(dst,src,strlen(src));printf("%d\n",strlen(src));printf("%s\n",dst );
模拟memcpy实现原理:
char *my_memcpy(char *dst, char * src,size_t len){ char *ret = dst; if((dst == NULL) && (src == NULL)) { return NULL; } while(len-- >0) { *dst++ = *src++; } return ret;}

memmove

原型:void memmove(void dst, void const src, size_t length);

说明:memmove用于从src拷贝length个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

用法:
char s[]=”Golden Global View”;memmove(s,s+7,strlen(s)+1-7);printf(“%s”,s);
输出结果:Global View

*注意:这里的拷贝长度strlen(s)+1-7表示把字符串结尾的’\0’也拷贝进来。
memcmp

原型:void memcmp(void const s1, void const s2, size_t length);
说明:memcmp是比较内存区域buf1和buf2的前length个字节,该函数是按字节比较的。
返回值:当s1s2时,返回值>0
如:char s1=”abc”;char s2=”acd”;int r=memcmp(s1,s2,3);就是比较s1和s2的前3个字节,第一个字节相等,第二个字节比较中大小已经确定,不必继续比较第三字节了。所以r=-1

memchr:

原型:void memchr(void s1, void const s2, size_t length);
说明:从buf所指内存区域的前length个字节查找字符ch。

用法:
char *s="Hello, Programmers!";void *p;//因为memchr(,,);return void*p;p=memchr(s,'P',strlen(s));//p=(char *)memchr(s,'P',sizeof(s)); //s是一个指向char的指针,而任何指针都是个一个4字节的数,在这里应//该是要说明搜索整个字符串的长度,所以应该用strlen(s)if(p){ printf("%s",p);}else{ printf("Not Found!");}

memst

原型:void memset(void dst, int ch, size_t length);
说明:将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值
通常用来进行内存初始化作用
用法:
char dst[20];memset(dst,0x0,sizeof(dst)); //把dst指向的大小为20的内存区域值都设置为0.
「C与指针心得」15.字符串内存操作memcpy\memmove\memcmp\memchr-1.jpg
C语言圈
15839 查看 2 0 反对

说说我的看法高级模式

您需要登录后才可以回帖 登录|立即注册

  • Chan丶Baek70

    2021-2-23 10:26:46 使用道具

    来自: 北京来自: 北京来自: 北京来自: 北京
    转发了
  • 艾格格的家

    2021-2-24 03:32:38 使用道具

    来自: 北京来自: 北京来自: 北京来自: 北京
    转发了

相关阅读