**:/blog/item/7184aa114e1ca3cca6ef3f3c.html
這裡總結了一部分函式:memcpy,memset,memmove,strcpy,strcat,strlen,strcmp,strncmp,strstr
等函式的具體實現過程。
#ifndef null
#define null ((void *)0)
#endif
#include "stdio.h"
#include "stdlib.h"
#include
void* mymemcpy(void *pdst, void *psrc, size_t ilen)
void* mymemset(void *pdst, int iset, size_t ilen)
char *mystrcpy(char *pdst,const char *psrc)
//複製字串
while(*psrc++);
return prst;
} char *mystrcat(char *pdst,const char *psrc)
//拼接字串
size_t mystrlen(const char *pstr)
//求字串的長度
int mystrcmp(const char *str1,const char *str2)//比較字串的大小
} return ((*str1 > *str2) ? 1 : -1);
}int mystrncmp(const char *pstr1, const char *pstr2, int n)
if(*pstr1 == *pstr2)
return 0;
return ((*pstr1 > *pstr2) ? 1 : -1);
}char *mystrstr (const char *pstr1, const char *pstr2)//字串匹配函式實現
while ( *pstr1 )
// 串pstr1沒有結束
if ( pstr2[i] != pstr1[i] )
break;
i++;
} pstr1++;
} return (char*)null;
}char* mystrstr1(char *s, char *find)
//字串匹配函式實現
while (sc != c);
} while (mystrncmp(s, find, len) != 0);
s--;
} return ((char *)s); //返回的是匹配字串的首位址位置
}void * mymemmove(void * dst,const void * src,size_t count)
} else
//出現記憶體重疊的情況,可能覆蓋dst的內容(已經轉移的資料被覆蓋了),
//採用又高位址到低位址的賦值可避免這個現象 }
return(ret);
}int main()
以下**:
char * ___strtok = null;
//複製
char * strcpy(char * dest,const char *src)
//最多複製前count個字串
char * strncpy(char * dest,const char *src,size_t count)
//字串連線
char * strcat(char * dest, const char * src)
//連線前n個字串(有問題)
char * strncat(char *dest, const char *src, size_t count)
} return tmp;}
//比較
int strcmp(const char * cs,const char * ct)
return __res;
}int strncmp(const char * cs,const char * ct,size_t count)
return __res;
}char * strchr(const char * s,char c)
size_t strlen(const char * s)
size_t strnlen(const char * s, size_t count)
size_t strspn(const char *s, const char *accept)
if (*a == '/0')
return count;
++count;
} return count;
}char * strpbrk(const char * cs,const char * ct)
} return null;
}char * strtok(char * s,const char * ct)
sbegin += strspn(sbegin,ct);
if (*sbegin == '/0')
send = strpbrk( sbegin, ct);
if (send && *send != '/0')
*send++ = '/0';
___strtok = send;
return (sbegin);
}void * memset(void * s,char c,size_t count)
char * bcopy(const char * src, char * dest, int count)
void * memcpy(void * dest,const void *src,size_t count)
void * memmove(void * dest,const void *src,size_t count)
else
return dest;
}int memcmp(const void * cs,const void * ct,size_t count)
void * memscan(void * addr, unsigned char c, size_t size)
return (void *) p;}
實現C字串常用函式
字串長度 int stringlen const char str 字串比較 int stringcompare const char dst,const char src 字串複製 char stringcopy char dst,const char src 字串連線 char stringco...
字串函式實現
本文介紹了strcpy,strcnpy,atoi,itoa,strcmp,strncmp,字串逆置的c語言實現 比較簡單,或許存在bug 1.strcpy,strncpy 2.字串的逆置 void reverse char s q 這個時候q是指向 0 的,所以需要往前移動一下 while q p ...
字串函式實現
1.memmove void memmove void dest,const void src,size t count memmove用於從source拷貝count個字元到dest,如果目標區域和源區域有重疊的話,memmove能夠保證在源串覆蓋之前將重疊區域的位元組拷貝到目標區域中 void ...