标签:
// 复制字符串 记住避免冲突,这里写成 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;
}
具体自己分析看看啊!!!
标签:
原文地址:http://www.cnblogs.com/shengruxiahua/p/4832918.html