char* my_strncat(char* dest,const char* rec, int len)
{
assert(dest && rec);
char* ret = dest; //记录起始指针
while (*dest)
dest++; //找到dest对应'\0'的位置
while (len-- && (*dest++ = *rec++)); //当前需要追加的字符个数不为零且rec指针不指向'\0'
*dest = '\0'; //若需要追加的字符个数已为零,则添加'\0'
return ret;
}
优化:(1)形参中用于传字符串的指针设为const,使其更加稳健
(2)assert断言防止传入指针为空
(3)返回char*类型更方便调用
陷阱:其中while (len-- && (*dest++ = *rec++))不可改为while ((*dest++ = *rec++) && len--)
否则在做(需要追加的字符不为零)的判断前,已经将下一个*rec赋值给*dest,将比预期多追加一个字符。