一、字符串复制
1.
void Mystrcpy1(char *des,char *src)//1
{
int i;
for(i=0;src[i]!='\0';i++)//1
{
des[i] = src[i];//*(des+i) = *(src+i);
}
des[i] = '\0';
}
{
int i;
for(i=0;src[i]!='\0';i++)//1
{
des[i] = src[i];//*(des+i) = *(src+i);
}
des[i] = '\0';
}
void Mystrcpy2(char *des,char *src)
{
while(*src != '\0')//2
{
*des = *src;
src++;
des++;
}
*des = '\0';
}
{
while(*src != '\0')//2
{
*des = *src;
src++;
des++;
}
*des = '\0';
}
void Mystrcpy3(char *des,char *src)
{
int i;
for(i=0; *(src+i)!='\0';i++)
{
*(des+i) = *(src+i);
}
*(des+i) = '\0';
}
{
int i;
for(i=0; *(src+i)!='\0';i++)
{
*(des+i) = *(src+i);
}
*(des+i) = '\0';
}
void Mystrcpy4(char *des,char *src)
{
while(*des++ = *src++) ;//
}
{
while(*des++ = *src++) ;//
}
void Mystrcpy5(char *des,char *src)
{
//参数检查,健壮性(鲁棒性)
assert(des!=NULL && src!=NULL);//assert
if(des==NULL || src==NULL)
{
return ;//exit退出整个程序
}
{
//参数检查,健壮性(鲁棒性)
assert(des!=NULL && src!=NULL);//assert
if(des==NULL || src==NULL)
{
return ;//exit退出整个程序
}
while(*des++ = *src++) ;
}
char *Mystrcpy6(char *des,char *src)
{
char *p = des; //p保存了des(这是个数组)的首地址
assert(des!=NULL && src!=NULL);
if(des==NULL || src==NULL)
{
return NULL;
}
}
char *Mystrcpy6(char *des,char *src)
{
char *p = des; //p保存了des(这是个数组)的首地址
assert(des!=NULL && src!=NULL);
if(des==NULL || src==NULL)
{
return NULL;
}
while(*des++ = *src++) ;
return p;
}
}
int main()
{
char *src = "123";
char des[20];//src不可改变,des是src拷进的,所以值发生变化,不能用char *des
Mystrcpy(des,src);
return 0;
}
char *Mystrcpy(char *des,const char *src)
{
assert(des!=NULL && src!=NULL);
{
assert(des!=NULL && src!=NULL);
int i;
for(i=0;src[i]!='\0';i++)
{
des[i] = src[i];
for(i=0;src[i]!='\0';i++)
{
des[i] = src[i];
//src[i] = '\0';
}
des[i] = '\0';
}
des[i] = '\0';
return des;
}
}
二、测字符串的有效长度
1.
return i;int Mystrlen(const char *str)
{
assert(str != NULL);
return i;int Mystrlen(const char *str)
{
assert(str != NULL);
int i = 0;
while(*str!='\0')
{
i++;
str++;
}
/*for(i=0;str[i]!='\0';i++)
{
;
}*/
}
while(*str!='\0')
{
i++;
str++;
}
/*for(i=0;str[i]!='\0';i++)
{
;
}*/
}
}
int main()
{
printf("%d\n",Mystrlen("abcd"));
return 0;
}
return 0;
}
2.sizeof与strlen
int main()
{
char str1[100] = "abcde";
char str2[] = "abcde";
char str3[100] = "abcdef\0ijk\n";
char str4[] = "abcdef\0ijk\n";
char *str5 = "abcde";//char * str5[6];
char *str6 = "abcdef\0ijk\n";
printf("%d,%d\n",sizeof(str1),strlen(str1));//100,5
printf("%d,%d\n",sizeof(str2),strlen(str2));//6,5
printf("%d,%d\n",sizeof(str3),strlen(str3));//100,6
printf("%d,%d\n",sizeof(str4),strlen(str4));//12,6;
printf("%d,%d\n",sizeof(str5),strlen(str5));//4,5
printf("%d,%d\n",sizeof(str6),strlen(str6));//4,6
{
char str1[100] = "abcde";
char str2[] = "abcde";
char str3[100] = "abcdef\0ijk\n";
char str4[] = "abcdef\0ijk\n";
char *str5 = "abcde";//char * str5[6];
char *str6 = "abcdef\0ijk\n";
printf("%d,%d\n",sizeof(str1),strlen(str1));//100,5
printf("%d,%d\n",sizeof(str2),strlen(str2));//6,5
printf("%d,%d\n",sizeof(str3),strlen(str3));//100,6
printf("%d,%d\n",sizeof(str4),strlen(str4));//12,6;
printf("%d,%d\n",sizeof(str5),strlen(str5));//4,5
printf("%d,%d\n",sizeof(str6),strlen(str6));//4,6
}