You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中将long类型数组转换为换行分隔的ASCII字符串的实现方法

C语言实现long数组转换行分隔字符串方案

前置说明

C语言中long为整数类型,NULL是空指针常量,你示例中数组存储的NULL实际会被转换为整数0,我们默认以0作为数组的终止标记,你可以根据实际业务约定修改终止值。

实现思路

  • 遍历long数组,读到终止标记时停止遍历
  • 逐次将long类型值转为十进制字符串,追加到输出缓冲区后拼接\n
  • 全程做缓冲区边界校验,避免内存越界

完整可运行代码

#include <stdio.h>
#include <stddef.h>

// 可根据实际场景修改终止值和缓冲区最大值
#define ARRAY_TERMINATOR 0
#define MAXLINE 1024

/**
 * @brief 将long数组转换为换行分隔的字符串
 * @param arr 输入long数组,以ARRAY_TERMINATOR作为结束标记
 * @param buf_out 输出缓冲区
 * @param buf_size 输出缓冲区总大小
 * @return 0转换成功,-1转换失败(缓冲区不足/写入错误)
 */
int long_arr_to_line_str(long *arr, char *buf_out, size_t buf_size) {
    if (arr == NULL || buf_out == NULL || buf_size == 0) {
        return -1;
    }
    buf_out[0] = '\0';
    size_t used_len = 0;

    for (size_t i = 0; arr[i] != ARRAY_TERMINATOR; i++) {
        int write_bytes = snprintf(buf_out + used_len, buf_size - used_len, "%ld\n", arr[i]);
        // snprintf返回负值代表写入出错,返回值大于等于剩余空间代表缓冲区不足
        if (write_bytes < 0 || (size_t)write_bytes >= buf_size - used_len) {
            return -1;
        }
        used_len += write_bytes;
    }
    return 0;
}

// 测试示例
int main() {
    long array[30] = {172648712, 27146721, 27647212, 0, 0};
    char bufOut[MAXLINE];
    if (long_arr_to_line_str(array, bufOut, MAXLINE) == 0) {
        // 输出结果和你要求的"172648712\n27146721\n27647212\n"完全一致
        printf("转换结果:\n%s", bufOut);
    } else {
        printf("转换失败,请检查缓冲区大小或输入参数\n");
    }
    return 0;
}

可选调整

如果不需要末尾的最后一个换行符,可以在遍历结束后添加一行代码移除:

if (used_len > 0) {
    buf_out[used_len - 1] = '\0';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:36:07