strcat()和strncat()函数的实现

本文详细介绍了C语言中用于连接字符串的strcat和strncat函数的实现原理与使用方法,并给出了具体的代码示例。

char *strcat(char *dest, const char *src)
该函数的功能是连接字符串src和dest,将src的内容接入到dest的后面,要求dest和src无重叠,并且dest有足够的空间容纳src。

char *my_strcat(char *dest, const char *src)
{
    if(dest == NULL || src == NULL)
    {
        return dest;
    }

    dest += strlen(dest);
    strcpy(dest, src);

    return dest;
}

char *strncat(char *dest, const char *src, size_t n)
该函数的功能同上,区别是只是将src的前n个字符拷贝至dest的后面.

char *my_strncat(char *dest, const char *src, size_t n)
{
    if(dest == NULL || src == NULL)
    {
        return dest;
    }

    dest += strlen(dest);
    strncpy(dest, src, n);

    return dest;
}
`strcat` `strncat` 都是 C 语言中的字符串拼接函数,用于将一个字符串(源字符串)追加到另一个字符串(目标字符串)的末尾。它们的区别主要在于安全性: ### 1. `strcat`(不检查缓冲区溢出) ```c char *strcat(char *dest, const char *src); ``` - **功能**:将 `src` 指向的字符串追加到 `dest` 指向的字符串末尾(覆盖 `dest` 的 `\0`)。 - **问题**:如果 `dest` 的空间不足以容纳追加后的字符串,会导致**缓冲区溢出**(Undefined Behavior)。 - **示例**: ```c char dest[10] = "hello"; strcat(dest, "world"); // 可能溢出,因为 dest 只有 10 字节 ``` ### 2. `strncat`(安全版本,限制追加长度) ```c char *strncat(char *dest, const char *src, size_t n); ``` - **功能**:从 `src` 追加**最多 `n` 个字符**到 `dest` 末尾(自动补 `\0`)。 - **优点**:避免溢出,但需确保 `dest` 剩余空间 ≥ `n + 1`(含 `\0`)。 - **示例**: ```c char dest[10] = "hello"; strncat(dest, "world", 4); // 追加 "worl",结果 "helloworl\0" ``` ### 关键区别 | 特性 | `strcat` | `strncat` | |---------------|------------------------|-------------------------------| | 安全性 | 不安全(可能溢出) | 安全(可限制长度) | | 参数 | `dest, src` | `dest, src, n`(最大追加长度)| | 自动补 `\0` | 是 | 是(总追加 `n+1` 字节) | ### 最佳实践 - 优先使用 `strncat`,并确保 `n` ≤ `dest` 剩余空间 - 1(留位置给 `\0`)。 - 检查目标缓冲区大小是否足够,例如: ```c char dest[20] = "hello"; size_t remaining_size = sizeof(dest) - strlen(dest) - 1; strncat(dest, "world", remaining_size); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值