首先看看代码:
1 #ifndef STRCAT_H 2 #define STRCAT_H 3 4 /******************************************************************* 5 原型:extern char *strcat(char *dest,char *src); 6 7 strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部; 8 dest最后的结束字符NULL会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。 9 10 返回指向dest的指针。 11 12 注意:dest 与 src 所指的内存空间不能重叠, 13 且 dest 要有足够的空间来容纳要复制的字符串。 14 15 ******************************************************************* 16 拓展: 17 * 有两个意思,理论上 18 作为 乘法 运算符,级别低于 ++(自增)。 19 作为 指针取值 运算符,级别同 ++(自增)一样。 20 21 *p++; 很令人混淆。它不是 *p = *p + 1; 而是 *p = *(p+1); 22 *******************************************************************/ 23 24 #include <stdio.h> 25 26 char *cat_stacat(char *dst, const char *src) { 27 if (NULL == dst && NULL == src) 28 return NULL; 29 30 char *addr = dst; 31 32 // 方法1: 33 // Notice: 注意方法1和2的区别!方法1的话,最后一次循环dst加了1,最终指向字符串结束符' '的下一字节
// 如果不--dst。则最后可能是“hello world”,遇到 就结束,所以只会输出hello
34 /*while (*dst++) ; 35 --dst;*/ 36 37 // 方法2: 38 while (*dst) 39 ++dst; 40 41 while (*dst++ = *src++) ; 42 43 *dst = '