C语言字符串相关库函数的实现strcpy、memcpy、strncpy、strcat、strncpy、memset、memcpy、strcpy
2014-03-28 00:19
741 查看
1、不调用库函数实现strcpy()
char *strcpy(char *strDest,const char *strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char *pstrDest=strDest;
while((*strDest++=*strSrc++)!='\0');
return pstrDest;
}
2、不调用库函数实现memcpy()
void* memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTo!=NULL)&&(pvFrom!=NULL));
unsigned char* pbTo=(unsigned char*)pvTo;
unsigned char* pbFrom =(unsigned char*)pvFrom;
while(size-->0)
{
*pbTo++=*pbFrom++;
}
return pbTo;
}
3、不调用库函数实现strncpy()
char *strncpy(char *strDest,const char *strSrc,size_t size)
{
assert((dst!=NULL)&&(str!=NULL));
char* pstrDest=strDest;
int i=0;
while(((*strDest++=*strSrc++)!='\0')&&(i++)<size);
*(pstrDest+size)='\0';
return pstrDest;
}
4、不调用库函数实现strcat()
char *strcat(char *strDest,const char *strSrc)
{
assert(strSrc!=NULL);
char* pstrDest=strDest;
while(*strDest++!='\0');
strDest--;
while((*strDest++=*strSrc)!='\0');
return pstrDest;
}
5、不调用库函数实现strncat()
char* strncat(char* strDest,char* strSrc,int size)
{
assert(strDest!=NULL&&strSrc!=NULL);
assert(size>=0);
char* pstrDest=strDest + strlen(strDest);
while(size-- && (*pstrDest++=*pstrSrc++)!='\0');
return strDest;
}
6、不调用库函数实现memset()
void* memset(void* strDest, int value, int size)
{
assert(strDest!=NULL && size>=0);
char* pstrDest = (char*)strDest;
while(size--)
*pstrDest++ = value;
return strDestt;
}
7、不调用库函数实现memcpy()
void* memcpy(void* pDest, const void* pSrc, int size)
{
assert(pDest!=NULL && pSrc!=NULL && size>=0);
char* pDestCpy = NULL;
char* pSrcCpy = NULL;
//要复制的内存有重叠时,从后往前复制
if(pSrc<pDest && (char*)pSrc+size>(char*)pDest)
{
pDestCpy = (char*)pDest+size-1;
pSrcCpy = (char*)pSrc+size-1;
while(size--)
*pDestCpy-- = *pSrcCpy--;
}
else
{
pDestCpy = (char*)pDest;
pSrcCpy = (char*)pSrc;
while(size--)
*pDestCpy++ = *pSrcCpy++;
}
return pDest;
}
8、不调用库函数实现strcmp()
int strcmp(char* strDest,char* strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char* pstrDest=strDest;
char* pstrSrc =strSrc;
while(*pstrDest && *pstrSrc && (*pstrDest==*pstrSrc))
{
pstrDest++;
pstrSrc++;
}
return (*pstrDest-*pstrSrc);
}
char *strcpy(char *strDest,const char *strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char *pstrDest=strDest;
while((*strDest++=*strSrc++)!='\0');
return pstrDest;
}
2、不调用库函数实现memcpy()
void* memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTo!=NULL)&&(pvFrom!=NULL));
unsigned char* pbTo=(unsigned char*)pvTo;
unsigned char* pbFrom =(unsigned char*)pvFrom;
while(size-->0)
{
*pbTo++=*pbFrom++;
}
return pbTo;
}
3、不调用库函数实现strncpy()
char *strncpy(char *strDest,const char *strSrc,size_t size)
{
assert((dst!=NULL)&&(str!=NULL));
char* pstrDest=strDest;
int i=0;
while(((*strDest++=*strSrc++)!='\0')&&(i++)<size);
*(pstrDest+size)='\0';
return pstrDest;
}
4、不调用库函数实现strcat()
char *strcat(char *strDest,const char *strSrc)
{
assert(strSrc!=NULL);
char* pstrDest=strDest;
while(*strDest++!='\0');
strDest--;
while((*strDest++=*strSrc)!='\0');
return pstrDest;
}
5、不调用库函数实现strncat()
char* strncat(char* strDest,char* strSrc,int size)
{
assert(strDest!=NULL&&strSrc!=NULL);
assert(size>=0);
char* pstrDest=strDest + strlen(strDest);
while(size-- && (*pstrDest++=*pstrSrc++)!='\0');
return strDest;
}
6、不调用库函数实现memset()
void* memset(void* strDest, int value, int size)
{
assert(strDest!=NULL && size>=0);
char* pstrDest = (char*)strDest;
while(size--)
*pstrDest++ = value;
return strDestt;
}
7、不调用库函数实现memcpy()
void* memcpy(void* pDest, const void* pSrc, int size)
{
assert(pDest!=NULL && pSrc!=NULL && size>=0);
char* pDestCpy = NULL;
char* pSrcCpy = NULL;
//要复制的内存有重叠时,从后往前复制
if(pSrc<pDest && (char*)pSrc+size>(char*)pDest)
{
pDestCpy = (char*)pDest+size-1;
pSrcCpy = (char*)pSrc+size-1;
while(size--)
*pDestCpy-- = *pSrcCpy--;
}
else
{
pDestCpy = (char*)pDest;
pSrcCpy = (char*)pSrc;
while(size--)
*pDestCpy++ = *pSrcCpy++;
}
return pDest;
}
8、不调用库函数实现strcmp()
int strcmp(char* strDest,char* strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char* pstrDest=strDest;
char* pstrSrc =strSrc;
while(*pstrDest && *pstrSrc && (*pstrDest==*pstrSrc))
{
pstrDest++;
pstrSrc++;
}
return (*pstrDest-*pstrSrc);
}
相关文章推荐
- 【转】字符串操作函数 C语言实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... ) .
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现
- memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现
- 几个重要库函数的实现-strcpy,strncpy,memcpy,memset
- C语言中的几个字符串处理函数: strcat, strncat, strcpy, strncpy, strlen
- (C语言)自己写字符串操作函数(一)——strlen/strcpy/strcat/strcmp/strchr/strpbrk/strstr等相关函数
- 几个重要库函数的实现-strcpy,strncpy,memcpy,memset
- 几个重要库函数的实现-strcpy,strncpy,memcpy,memset
- strlen,strcpy,strcat,strcmp四个函数的原型,memcpy,memset的实现
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- C语言中字符串相关函数的实现(strcat strlen strcmp strcpy memcpy)
- 字符串 函数sprintf、strcpy 、strncpy及 memcpy , strftime,strcat
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr