memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现

来源:互联网 发布:qq授权软件取消 编辑:程序博客网 时间:2024/05/18 00:01

为区别库函数,函数名首字母大写。


Memcmp函数:

//内存区域内容比较函数 int  Memcmp(const void *buf1,const void *buf2,unsigned int count){unsigned int i=0;while(i<count){if( ((char*)buf1)[i]!= ((char*)buf2)[i]     )return ((char*)buf1)[i]-((char*)buf2)[i];i++;}return 0;}


Memcpy函数:

//内存的拷贝函数#ifdef size_t   //需要定义size_t类型#undef size_t#endif#ifndef size_t#define size_t unsigned int#endifextern void*  Memcpy(void *dest,const void * src,size_t n){unsigned int i=0;while(i<n){((char*)dest)[i]=((char*)src)[i];i++;}return dest;  // 返回拷贝后的内存指针}

Memmove函数:

/*memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。*///函数原型#ifdef size_t   //需要定义size_t类型#undef size_t#endif#ifndef size_t#define size_t unsigned int#endifvoid *Memmove( void *dest, const void *src, size_t count ){int i=0;if(src==dest){}else if(((char*)src+count)>(char*)dest && (char*)src<(char*)dest)  // 如果冲突{//从尾部循环赋值i=count-1;while(i>=0){((char*)dest)[i]=((char*)src)[i];i--;}}else{while(i<count){((char*)dest)[i]=((char*)src)[i];i++;}}return dest;}


Memset函数:

//实现memset函数的功能//内存区域初始化操作//函数不能检查出指针越界情况  需要用户自行判断#ifdef size_t   //需要定义size_t类型#undef size_t#endif#ifndef size_t#define size_t unsigned int#endifvoid * Memset(void *s,int ch,size_t n){int i=0;while(i<n){*((char*)s+i)=ch;  //ch代表ascii码的整数值i++;   }return s;}

Strcat函数:

//连接函数//函数并不负责检查str1是否有足够的容量去容纳,需要用户自行判断char * Strcat(char* str1,char* str2){int n=0,p=0;//获取下标while(str1[n]!='\0'){n++;}while(str2[p]!='\0'){str1[n+p]=str2[p];p++;}str1[n+p]='\0';return str1;}

Strcmp函数:

//比较函数int Strcmp(const char* str1,const char* str2)  {int i=0;while(str1[i]&&str2[i]&&(str1[i]==str2[i]))   //好方法  算法特别精简{i++;}return str1[i]-str2[i];}

Strcpy函数:

//字符串拷贝函数void Strcpy(char* str1,char* str2){int i=0;while(str2[i]!='\0'){str1[i]=str2[i];i++;}str1[i]='\0';}

Strlen函数:

//实现库函数strlen()的功能//函数同一首字母大写 ,以区分库函数#include<assert.h>#ifndef NULL#define NULL ((void*)0)#endifunsigned int Strlen(const char * str){unsigned int length=0;assert(str!=NULL);while(str[length]!='\0'){length++;}return length;}/*---------------递归的形式  但没有断言部分unsigned int Strlen(const char * str){if(*str=='\0')return 0;return 1+Strlen(str+1);}*/











0 0
原创粉丝点击