1 char *strcpy(char *dest,char *src) 2 { 3 char *d=dest;//輸入的參數進行備份 4 char *s=src; 5 6 int count=0; 7 8 assert(dest!=NULL && src!=NULL);//指針合法性檢測
if(src==dest) return src; 11 count = strlen(src) +1;//計算src字符串長度 12 if(count <= 1) return 0;//src字符串為空 13 if(dest < src || dest >= (src+count)) 14 { 15 while(count--) 16 {*d++ = *s++;}//從前向後復制 17 } 18 else{ 19 d = dest + count; 20 s = src + count; 21 while(count -- ) 22 { 23 *d-- = *s--;//從後向前復制 24 } 25 } 26 return dest; 27 }
1 void memcpy(void *pDst,const void *pSrc,size_t size) 2 { 3 assert(pDst!=NULL && pSrc!=NULL); 4 if((pSrc<pDst)&&((char *)pSrc+size>pDst)) 5 { 6 char *pstrSrc=(char *)pSrc + size -1; 7 char *pstrDst=(char *)pDst +size-1; 8 while(size--) 9 *pstrDst-- = *pstrSrc; 10 } 11 else{ 12 char *pstrSrc=(char *)pSrc; 13 char *pstrDst=(char *)pDst; 14 while(size--){ 15 *pstrDst++ = *pstrSrc++; 16 } 17 }
strcpy和memcpy主要有以下3方面的區別。
1、復制的內容不同。strcpy只能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類等。
2、復制的方法不同。strcpy不需要指定長度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定復制的長度。
3、用途不同。通常在復制字符串時用strcpy,而需要復制其他類型數據時則一般用memcpy
/*
1123rty
1123rty
1123rty
Press any key to continue
*/
#include <stdio.h>
char *strcopy(char*strDest,const char*strSrc) {
char *tempptr = strDest;
while(*tempptr++ = *strSrc++);
return strDest;
}
int main() {
char aa[100];
char bb[100];
gets(bb);
strcopy(aa,bb);
puts(aa);
puts(bb);
return 0;
}
我不知道strlwr是干什麼?
1.strcat
void mycat(char *s1, char *s2)
{
while(*s1++);
s1--;
while(*s1++ = *s2++);
}
2.strcpy
void mycpy(char *s1, char *s2)
{
while(*s1++ = *s2++);
}
3.strcmp
int mycmp(char *s1,char *s2)
{
for( ; *s == *t;s++,t++)
if(*s == 0) return 0;
return *s - *t;
}
4.strlen
int mylen(char *s1)
{
char *p = s1;
while(*p++);
return p - s -1;
}