strcpy
// 复制字符串 记住避免冲突,这里写成 strcopy 而不是 strcpy
#include<stdio.h>
char * strcopy (char *dest, const char *src);
int main()
{
char string[20]; // 定义一个字符串数组
char *str1="Heloo , zhangqi "; // 对字符指针变量初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋给str1
strcopy(string,str1); // 调用strcopy函数 这里 实参是 一个数组名,一个字符指针变量 当实参是数组名,形参是指针变量时,只要保证数据类型一致即可传递。
printf("%s \n",string);
return 0;
}
char * strcopy (char *dest, const char *src) // 来自 glibc的源码,改动了地方 const ptrdiff_t off = dest - s - 1; ptrdiff_t 也就是 signed int
// 当实参是数组名,形参是指针变量时,只要保证数据类型一致即可传递。
{
char c;
char *s = (char *) src; // char *s 的s,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
// 这里的 s 指针 指向了 src ,应该是src的首地址吧
const signed int off = dest - s - 1; // 这里不能理解??? tell me why ???
do
{
c = *s++; // 相当于 c=*(s++); 分开就是 因为 ++在后,所以先 运算后 s+1
s[off] = c;
}
while (c != '\0');
return dest;
}
具体自己分析看看啊!!!