You need to enable JavaScript to run this app. C语言实现字符串数组元素添加与逗号分隔拼接功能问题
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现字符串数组元素添加与逗号分隔拼接功能问题

C语言字符串数组操作函数实现

以下是两个需求函数的可直接使用的实现,可适配常规的固定代码框架,若参数签名与你现有框架不一致,仅需调整参数名/遍历逻辑即可。

前置依赖

需提前引入以下头文件:

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

1. addNameToList 实现

函数功能

遍历字符串数组找到第一个NULL空闲槽位,为传入名字分配堆内存后挂载到该槽位,无空闲槽位/参数非法/内存分配失败时不修改原数组。

实现代码

void addNameToList(char** list, int listMaxLen, const char* name) {
    // 非法参数直接返回
    if (list == NULL || listMaxLen <= 0 || name == NULL) {
        return;
    }
    // 遍历查找第一个空闲槽位
    for (int i = 0; i < listMaxLen; i++) {
        if (list[i] == NULL) {
            size_t nameLen = strlen(name);
            // 分配内存,预留\0的空间
            char* nameBuf = (char*)malloc(nameLen + 1);
            if (nameBuf == NULL) {
                return;
            }
            strncpy(nameBuf, name, nameLen);
            // 手动补\0,避免strncpy边界场景下未自动补结束符的问题
            nameBuf[nameLen] = '\0';
            list[i] = nameBuf;
            return;
        }
    }
    // 无空闲槽位,无操作
}

2. printListToString 实现

函数功能

跳过数组中NULL元素,将所有非空字符串用, 分隔拼接为完整字符串存入目标缓冲区,保证以\0结尾,返回缓冲区指针支持链式调用。

实现代码

char* printListToString(const char** list, int listLen, char* buf, size_t bufSize) {
    // 非法参数处理
    if (list == NULL || listLen <= 0 || buf == NULL || bufSize == 0) {
        if (buf != NULL && bufSize > 0) {
            buf[0] = '\0';
        }
        return buf;
    }
    // 初始化缓冲区为空
    buf[0] = '\0';
    size_t remainSpace = bufSize;
    // 标记是否是第一个非空元素,不需要前缀分隔符
    int isFirst = 1;

    for (int i = 0; i < listLen; i++) {
        if (list[i] == NULL) {
            continue;
        }
        const char* prefix = isFirst ? "" : ", ";
        size_t prefixLen = strlen(prefix);
        size_t strLen = strlen(list[i]);
        // 校验剩余空间是否足够
        if (remainSpace < prefixLen + strLen + 1) {
            break;
        }
        // 拼接分隔符
        strncat(buf, prefix, remainSpace - 1);
        remainSpace -= prefixLen;
        // 拼接字符串
        strncat(buf, list[i], remainSpace - 1);
        remainSpace -= strLen;

        isFirst = 0;
    }
    // 强制补结束符,避免缓冲区溢出
    buf[bufSize - 1] = '\0';
    return buf;
}

注意事项

  • 若你的现有框架中字符串数组以末尾NULL元素作为结束标识(无需传入数组长度参数),将遍历终止条件修改为list[i] != NULL即可。
  • 程序退出前需遍历释放数组中所有非空元素的堆内存,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Sentenza_IV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 04:27:00