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 }
注意上面的注释,避免少走一些弯路。