C字串函式實現

2021-07-02 00:21:10 字數 3132 閱讀 7466



**:/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 ...