#include<stdio.h>
void My_strcpy_1(char *arr,char *err)
{
int i = 0;
for (; *(arr + i) != '\0'; i++)
{
*(err+i) = *(arr+i);
}
*(err + i) = '\0';
}
void My_strcpy_2(char* arr, char* err)
{
char* p = arr;
char* q = err;
for (p; *(p) != '\0'; p++, q++)
{
*q = *p;
}
*q = '\0';
}
void My_strcpy_3(char* arr, char* err)
{
while (*err++ = *arr++);
}
int main()
{
char arr[] = "So,";
My_strcpy_1(arr, err);
printf("%s\n", arr);
printf("%s", err);
}
My_strcpy_1 数组+for
My_strcpy_2 指针+for
My_strcpy_3 while+指针
解释一下第三种方法:
void My_strcpy_3(char* arr, char* err)
{
while (*err++ = *arr++);
}
①arr++
先输出arr,再自增
②优先级(谭浩强)
* 2优先级(自右向左)
++ 2优先级(自右向左)
= 优先级偏后(自右向左)
即这个式子是先递增再解引用
③while(a=10)相当于判断while(10),也就是说while (*err++ = *arr++)相当于 while(*arr++),即判断的时候用的是赋值后的值。当赋值最后的‘\0’时,‘\0’的ASCALL码值为0,复制后相当于while(0),ji结束循环
也就是说,这句代码是说将arr指向的值赋给err,然后判断while(arr)。arr向后移一位,err向后移一位,再循环执行以上操作。直到循环结束。