Author: bakari Date: 2012/8/9
继上篇。。。。。
下面是我写的代码与源码作的一些比较,均已严格测试通过,分别以“string 之”系列述之。
下面包括strcat , strncat函数
1 /*******************************************************
2 * strcat and strncat
3 * Note: while(*desStr) desStr++; OK
4 * while(*desStr ++); ERROR!
5 * *desStr = '\0' 可有可无,不过最好加上
6 *******************************************************/
7 char * Mystrcat(char *desStr, const char *srcStr){
8 assert(NULL != desStr && NULL != srcStr);
9 char *address = desStr;
10
11 while(*desStr) desStr++; //(1)OK!
12 //while(*desStr ++); //(2)ERROR! 后缀++ 运算符较 间接操作符 * 优先级高,在跳出循环时指向了'\0'之后
13 while(*desStr ++ = *srcStr ++);
14 // *desStr = '\0'; //?为何可有可无(道理同上)
15
16 return address;
17 }
18
19 char * Mystrncat(char *desStr, const char *srcStr, size_t nCount){
20 assert(NULL != desStr && NULL != srcStr && nCount <= strlen(srcStr));
21 char *address = desStr;
22
23 while( *desStr )
24 *desStr ++;
25 while( nCount-- )
26 *desStr ++ = *srcStr ++;
27 *desStr = '\0';
28
29 return address;
30 }
注意上面的注释,避免少走一些弯路。