strcat函数和strncat函数的对比与模拟实现
1.strcat函数的介绍
资源来源于cplusplus网站
它的作用是:
将源字符串的副本追加到目标字符串。目标中的结束空字符被源的第一个字符覆盖,并且在由目标中的两个字符串串联形成的新字符串的末尾包含一个空字符。
目的地和来源不得重叠。
说白了就是将多个单独的字符串连接到一起
其中,第一个参数连接的 “目的地” ,因此不能加上 const ,以保持它的可修改性;
第二个参数则是 连接的“来源” , 需加上 const ,增加代码的鲁棒性和安全性
2.strncat函数的介绍
资源来源于cplusplus网站
它的作用是:
将源的第一个 num 字符追加到目标,再加上一个终止的 null 字符。
如果源中的 C 字符串的长度小于 num,则只复制到终止 null 字符为止的内容
说白了,他就是按长度连接字符串,连接二的字符串长度需小于数组大小,就是比函数strcat要求多一点
他和strcat的修饰规则一样 :
其中,第一个参数连接的 “目的地” ,因此不能加上 const ,以保持它的可修改性;
第二个参数则是 连接的“来源” , 需加上 const ,增加代码的鲁棒性和安全性
3.strcat和strncat函数的对比
这两个函数唯一不同的就是strncat多了一个n,这个n就是需要链接的字符的长度,大小为字节
4.strcat的模拟实现
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest && src);
while (*dest != '\0')
{
*dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "abcdef";
char* p = "ghi";
printf("%s\n", my_strcat(arr1, p));
return 0;
}
5.strncat的模拟与实现
char* my_strncat(char* dest, const char* src, size_t num)
{
char* ret = dest;
//找到目标空间的\0
while (*dest != '\0')
{
dest++;
}
//拷贝数据
while (num--)
{
//当追加字符的个数大于源字符串中字符的个数时,函数只会追加到源字符串的'\0',防止越界
if ((*dest++ = *src++) == 0)
{
return ret;
}
}
//当没有追加到源字符串的'\0'时,给目标字符串末尾添加一个'\0',防止打印越界
*dest = '\0';
return ret;
}
int main()
{
char arr1[31] = "abc";
char arr2[] = "def";
printf("%s\n", my_strncat(arr1, arr2, 3));
return 0;
}