本文最后更新于 2026-03-05,文章内容可能已经过时。

C语言字符串追加需使用strcat函数,但必须确保目标缓冲区空间足够容纳追加后的总长度且字符串以\0结尾,避免自我追加(如strcat(arr, arr))导致死循环;为防止缓冲区溢出,安全实践推荐使用strncat并指定最大追加长度,这是正确操作字符串的核心原则。

在C语言中,字符串追加是常见的操作,主要使用strcat函数实现。

1. strcat函数基本用法

strcat函数用于将一个字符串追加到另一个字符串的末尾。

函数原型

char *strcat(char *dest, const char *src);

参数说明

  • dest: 目标字符串指针,必须有足够的空间容纳追加后的字符串
  • src: 源字符串指针,将被追加到目标字符串末尾

返回值

返回指向目标字符串dest的指针

示例代码

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello";
    char src[10] = " World";
    strcat(dest, src);
    printf("%s\n", dest); // 输出: Hello World
    return 0;
}

2. 使用注意事项

重要规则

  1. 目标空间必须足够大:目标数组必须能容纳源字符串追加后的总长度
  2. 字符串必须以\0结尾:目标字符串和源字符串都必须以\0结尾
  3. 目标空间必须可修改:不能是字符串常量(如char *p = "abc";
  4. 不能自我追加strcat(arr, arr);会导致死循环(覆盖\0

常见错误示例

// 错误1:目标空间不足
char dest[5] = "Hi";
char src[] = "Hello";
strcat(dest, src); // 缓冲区溢出

// 错误2:源字符串未以'\0'结尾
char dest[20] = "Hello ";
char src[] = {'W', 'o', 'r', 'l', 'd'}; // 无'\0'
strcat(dest, src); // 会追加随机字符

// 错误3:自我追加
char arr[20] = "abc";
strcat(arr, arr); // 死循环

3. strcat的模拟实现

#include <stdio.h>
#include <assert.h>

char *my_strcat(char *dest, const char *src) {
    char *ret = dest;
    assert(dest && src); // 确保指针不为空
    
    // 找到目标字符串的末尾
    while (*dest) {
        dest++;
    }
    
    // 将源字符串追加到目标字符串末尾
    while (*dest++ = *src++) {
        // 空循环,仅用于复制字符
    }
    
    return ret;
}

4. 安全替代方案:strncat

为避免缓冲区溢出,C语言提供了strncat函数,它允许指定追加的字符数量:

char *strncat(char *dest, const char *src, size_t n);

使用示例

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello";
    char src[10] = " World";
    strncat(dest, src, 5); // 仅追加5个字符
    printf("%s\n", dest); // 输出: Hello Wor
    return 0;
}

5. 手动实现字符串追加

如果不使用标准库函数,可以手动实现字符串追加:

#include <stdio.h>

int main() {
    char arr1[] = "hello";
    char arr2[] = "world";
    char arrbuf[100] = {0}; // 全部初始化为'\0'
    int index = 0;
    
    // 复制arr1到arrbuf
    while (arr1[index] != '\0') {
        arrbuf[index] = arr1[index];
        index++;
    }
    
    // 追加arr2
    int len = sizeof(arr1) - 1; // 减1是因为包含'\0'
    while (arr2[index - len] != '\0') {
        arrbuf[index] = arr2[index - len];
        index++;
    }
    
    // 添加字符串结束符
    arrbuf[index] = '\0';
    printf("%s\n", arrbuf); // 输出: helloworld
    return 0;
}

6. 总结

  • strcat是C语言中字符串追加的标准函数
  • 使用时必须确保目标空间足够大且以\0结尾
  • 避免自我追加,防止死循环
  • 为安全起见,推荐使用strncat控制追加长度
  • 理解字符串存储原理(以\0结尾)对正确使用字符串操作函数至关重要

正确使用字符串追加函数能有效避免缓冲区溢出等安全问题,是C语言编程中的重要基础技能。