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;
}