这几个函数中,最难的要数memmove这个函数了。memmove的原型是memmove(void *dst,void *src,int count)。因为这个函数需要考虑到dst和src都是指向同一个字符串中不同位置的问题。所以在这里需要对于这种情况作出判别。
具体注释见源代码:
#include <stdio.h> #include <string.h> void *memmove(void *dest,const void *src,size_t count) { void *ret=dest; if(dest == NULL || src == NULL) return; //这里来判别dest和src是否是指向同一字符串中不同位置, //如果是指向同一字符串,但是dest在src前面,则可以从前往后逐个赋值 //如果是指向同一字符串,但是dest在src后面,且dest>=src+count,那么仍然从前往后赋值 if(dest<=src||dest>=src+count) { while(count--) *dest++=*src++; } //如果是指向同一字符串,但是dest在src后面,且dest<=src+count,那么从后往前赋值 else { dest+=count-1; src+=count-1; while(count--) *dest--=*src--; } return ret; } int main() { char s[]="Golden Global View"; /* //这个用来测试dest在src的前面 memmove(s,s+7,strlen(s)-7); s[strlen(s)-7]=0; printf("%s",s); printf("/n/n"); */ //这个用来测试dest在src的后面,但是dest<=src+count memmove(s+7,s,strlen(s)-7); s[strlen(s)-7]=0; printf("%s",s); getchar(); return 0; }
字符串库函数memmove的源代码
最新推荐文章于 2024-08-13 15:03:19 发布