和C多项列表拼接

作者:袖梨 2026-06-11
C语言中数组拼接需手动实现,常用memcpy分段拷贝、指针偏移循环赋值、malloc动态分配及strcat/snprintf字符串专用拼接。

在 C 语言中,没有内置的“多项列表拼接”概念(不像 Python 的 list1 + list2 或 JavaScript 的 concat()),但实际开发中常需将多个数组(或缓冲区)的内容按顺序合并到一个目标数组中。关键在于:明确数据类型、长度、内存布局,并手动完成拷贝。

memcpy 分段拷贝最常用

这是最直接、高效的方式,适用于已知各段源数组地址和长度的场景:

  • 确保目标缓冲区足够大(总长度 ≥ 所有源数组长度之和)
  • memcpy 逐段复制,每次更新目标起始地址(即累加已写入字节数)
  • 注意:memcpy 不检查重叠,源/目标不能重叠;若可能重叠,改用 memmove

示例(拼接三个 int 数组):

int a[] = {1, 2};
int b[] = {3, 4, 5};
int c[] = {6};
int result[6]; // 总长 2+3+1 = 6

memcpy(result, a, sizeof(a));
memcpy(result+2, b, sizeof(b));
memcpy(result+5, c, sizeof(c));

用指针偏移 + 循环赋值更灵活

适合需要条件过滤、格式转换或逐元素处理的拼接(比如只拼接正数、转大小写等):

  • 用一个目标指针(如 int *out = result;)跟踪写入位置
  • 遍历每个源数组,对每个元素判断/转换后赋值,并递增 out
  • 避免硬编码下标,逻辑清晰,易扩展

动态拼接需配合 malloc / realloc

若源数组数量或长度运行时才确定(如解析配置文件得到多段数据),需动态分配内存:

  • 先遍历所有源,累加总长度
  • malloc 分配目标内存
  • 再执行拷贝(同第一种方式)
  • 若后续还要追加,可用 realloc 扩容,但注意旧数据可能被移动

字符串拼接用 strcatsnprintf

针对 null-terminated 字符串,C 标准库提供了专用函数:

  • strcat(dest, src):简单拼接,但不检查 dest 容量,易溢出
  • strncat(dest, src, n):限制最多拼接 n 字节,更安全
  • snprintf(buf, size, "%s%s%s", s1, s2, s3):一次格式化拼接,自动截断并补 ,推荐用于可控场景

相关文章

精彩推荐