最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
和C多项列表拼接
时间:2026-06-11 10:16:47 编辑:袖梨 来源:一聚教程网
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扩容,但注意旧数据可能被移动
字符串拼接用 strcat 或 snprintf
针对 null-terminated 字符串,C 标准库提供了专用函数:
-
strcat(dest, src):简单拼接,但不检查dest容量,易溢出 -
strncat(dest, src, n):限制最多拼接n字节,更安全 -
snprintf(buf, size, "%s%s%s", s1, s2, s3):一次格式化拼接,自动截断并补